大家好,欢迎来到IT知识分享网。
最近在看 <<redis 设计与实现>> 里面讲到了几种 二进制位统计算法,在此做个记录
1. 遍历二进制位
def count_bit(num): count = 0 while num: count += num & 1 num >>= 1 return count
遍历统计需要 O(N) 的时间复杂度,N为二进制的长度,总共需要做 N * (右移 + & + 加法) 次操作
对于一个100MB的二进制数,需要800万次上述运算才能得到结果( * 8)
2. 查表
table = { int("00000000", 2): 0, int("00000001", 2): 1, int("00000011", 2): 2, int("00000111", 2): 3, ... } def count_bit(num): return table[num]
查表的时间复杂度为 O(1),但是空间复杂度为 O(2^N), N 为二进制的长度
3. SWAR 算法
def count_bit(num): num = (num & 0x) + ((num >> 1) & 0x) num = (num & 0x) + ((num >&g
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141744.html