二进制位统计算法(swar)

二进制位统计算法(swar)本文介绍了在阅读 redis 设计与实现 时了解到的二进制位统计算法 包括遍历二进制位的 O N 时间复杂度方法 查表法的 O 1 时间复杂度但高空间复杂度 以及 SWAR 算法的高效计算过程 该算法通过特定的位运算大大减少了操作次数

大家好,欢迎来到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

(0)
上一篇 2025-05-15 12:45
下一篇 2025-05-15 13:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信