ブライアン・カーニハンのアルゴリズムが整数のセットビット(1)をカウントするためにO(log N)を使用する理由を誰かが説明できますか?このアルゴリズムの簡単な実装は以下のとおりです(JAVA)
int count_set_bits(int n){
int count = 0;
while(n != 0){
n &= (n-1);
count++;
}
return count;
}
右端のセットビットを0になるまで1つずつクリアすることでどのように機能するかは理解できますが、O(log N)を取得する方法がわかりません。