当前位置: 首页 > news >正文

c 博客网站开发教程电子商务静态网页设计

c 博客网站开发教程,电子商务静态网页设计,网站 盈利模式,卖鞋推广引流方法汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

定义

汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同字符的个数)。
汉明重量在常见的数据位符号串中,它是1的个数。

算法思想

基于分治的算法,将n位二进制进行分组,通过一系列位移和位运算操作,可以在常数时间内计算多个字节的汉明重量,并且不需要使用额外的内存。

简化示例

假设一个8bit的2进制串 x=abcd,efgh其中a-b 属于{0,1}
求解的输出是 ans = a+b+c+d+e+f+g+h

step1. 2bits m1= 0101 0101

x&m1 = 0b0d 0f0h
(x>>1)&m1 = 0a0c 0e0g
求和得到[a+b]_2[c+d]_2 [e+f]_2[g+h]_2,这里[x]_2表示2位二进制中1的个数

step2. 4bits m2 = 0011 0011

x&m2 = 00[c+d]_2 00[g+h]_2
(x>>2)&m2 = 00[a+b]_2 00[e+f]_2
求和得到[a+b+c+d]_4 [e+f+g+h]_4

step3. 8bits m4 = 0000 1111

x&m4 = 0000 [e+f+g+h]_4
(x>>4)&m4 = 0000 [a+b+c+d]_4
求和得到 [a+b+c+d+e+f+g+h]_8
对应的十进制值就是最终的答案

算法实现 variable-precision SWAR算法

const uint64_t m1  = 0x5555555555555555; //binary: 0101...
const uint64_t m2  = 0x3333333333333333; //binary: 00110011..
const uint64_t m4  = 0x0f0f0f0f0f0f0f0f; //binary:  4 zeros,  4 ones ...
const uint64_t m8  = 0x00ff00ff00ff00ff; //binary:  8 zeros,  8 ones ...
const uint64_t m16 = 0x0000ffff0000ffff; //binary: 16 zeros, 16 ones ...
const uint64_t m32 = 0x00000000ffffffff; //binary: 32 zeros, 32 ones
const uint64_t h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...//This is a naive implementation, shown for comparison,
//and to help in understanding the better functions.
//This algorithm uses 24 arithmetic operations (shift, add, and).
// 朴素算法
int popcount64a(uint64_t x)
{x = (x & m1 ) + ((x >>  1) & m1 ); //put count of each  2 bits into those  2 bits x = (x & m2 ) + ((x >>  2) & m2 ); //put count of each  4 bits into those  4 bits x = (x & m4 ) + ((x >>  4) & m4 ); //put count of each  8 bits into those  8 bits x = (x & m8 ) + ((x >>  8) & m8 ); //put count of each 16 bits into those 16 bits x = (x & m16) + ((x >> 16) & m16); //put count of each 32 bits into those 32 bits x = (x & m32) + ((x >> 32) & m32); //put count of each 64 bits into those 64 bits return x;
}

详细步骤

详细步骤
优化算法

//This is better when most bits in x are 0
//This algorithm works the same for all data sizes.
//This algorithm uses 3 arithmetic operations and 1 comparison/branch per "1" bit in x.
// 适用于0比较多的数
// 数字 n中最低位的 1 总是对应 n - 1 中的 0
// 将 n 和 n - 1 进行与运算总是能把 n 中最低位的 1 变成 0,并保持其他位不变
int popcount64d(uint64_t x)
{int count;for (count=0; x; count++)x &= x - 1;return count;
}// 常用写法
int hammingWeight(uint32_t n) {int count = 0;while( n ){count ++;n &= n-1;}return count;
}// 查表法 用空间换时间 从而得到O(1)的最优算法
// 以4bit的串为例,可以构造一个数组int counts[16]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4}.
// 对于4bit的x, x的hamming weight为:counts[x].
static unsigned char wordbits[65536] = { bitcounts of ints between 0 and 65535 };
static int popcount(uint32 i)
{return (wordbits[i&0xFFFF] + wordbits[i>>16]);
}

参考

Hamming weight WIKI
汉明权重(hamming weight) ----- 计算数据位中1的个数

http://www.yayakq.cn/news/87771/

相关文章:

  • 公司网站建设入哪科目网站权重对优化的作用
  • 做网站需要下载啥衡阳企业seo优化费用
  • 大连开发区网站设计公司怎么把文章导入wordpress
  • 无代码网站建设思睿鸿途北京网站建设
  • 济南网站建设服务关键字优化用什么系统
  • 上海的网站设计公司建筑行业最新资讯
  • 蓝色机械营销型网站手机商城下载安装
  • 徐州做网站的公司有几家外贸推广产品
  • 好网站建设网站网页设计工资条
  • 网站的字体做多大wordpress 小工具位置
  • 网站不兼容怎么办啊页面设计自述
  • 公司网站开发教程镇江seo网站
  • 南京企业网站开发公司源码之家网站模板
  • 网站建设面试问题泰州网站制作哪家好
  • 深圳 微网站建设ydgcm建设网站硬件
  • php做企业网站大连建行网点
  • 免费的企业网站中国国家培训网官网
  • 无锡网站建设信息有限做文交所的都有哪些网站
  • 咸阳商城网站开发设计什么网站上做奥数题
  • 做的比较好的电商网站企业logo标志设计公司
  • 电子商务网站与普通网站的区别安卓app生成器
  • 哈尔滨模板网站wordpress 默认登录
  • iis 手机网站优设网页
  • 东莞英文网站设计个人主页网页设计作品
  • 帮企业做网站的公司电子商务网站建设完整案例教程s2sh pdf下载
  • delphi做网站开发毕设做网站答辩会要求当场演示吗
  • 做企业网站服务器wordpress友情链接页面插件
  • 网站备案名称的影响厦门seo服务商
  • 网站页面app下载大全江苏建设管理中心网站
  • 免费php mysql网站成功营销案例100例