有人可以解释为什么 Brian Kernighan 的算法需要 O(log N) 来计算整数中的设置位 (1s)。该算法的简单实现如下(在 JAVA 中)
int count_set_bits(int n){
int count = 0;
while(n != 0){
n &= (n-1);
count++;
}
return count;
}
我通过逐位清除最右边的设置直到它变为0来理解它是如何工作的,但我只是不知道我们如何得到O(log N)。