Алгоритм счета битов (Брайан Керниган) в целочисленной сложности времени
Может кто-то объяснить, почему алгоритм Брайана Кернигана использует O (log N) для подсчета установленных бит (1 с) в целое число. Простая реализация этого алгоритма ниже (в JAVA)
int count_set_bits(int n){
int count = 0;
while(n != 0){
n &= (n-1);
count++;
}
return count;
}
Я понимаю, как это работает, очищая самый правый установленный бит один за другим, пока он не станет равным 0, но я просто не знаю, как мы получаем O (log N).