Может кто-нибудь объяснить, почему алгоритм Брайана Кернигана берет 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).