快速算法计算二进制数的1的数量

时间:2014-06-25 20:22:38

标签: algorithm

  1. 如果我有二进制数0111000111111, 是否有任何快速算法来计算1的数量?

  2. 如果0111000111111是一个字符串(例如" 0111000111111") 是否有任何快速算法来计算字符串中的1的数量?

1 个答案:

答案 0 :(得分:2)

一种相对快速的方法是预先计算所有字节值的位计数表,并对(无符号)整数的四个字节求和。

byte NB[256]= { 0, 1, 1, 2, 1, 2, 2, 3, 1, 1, ... };

N= NB[U & 255] + NB[(U >> 8) & 255] + NB[(U >> 16) & 255] + NB[(U >> 24) & 255];

您可以根据每个切片的不同位数进行调整。