5

比特数的大 O 是多少?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。

特别是使用此代码(其中 x = 4,y = 1):

return Integer.bitCount(x^y);
4

3 回答 3

7

鉴于其实现,该方法由六个按顺序执行的 O(1) 语句组成,因此它是 O(1)。

public static int bitCount(int i) {
    // HD, Figure 5-2
    i = i - ((i >>> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
    i = (i + (i >>> 4)) & 0x0f0f0f0f;
    i = i + (i >>> 8);
    i = i + (i >>> 16);
    return i & 0x3f;
}
于 2017-05-29T21:14:02.923 回答
2

是的O(1),这里是 JDK 1.5+ 的实现:

public static int bitCount(int i) {
    i = i - ((i >>> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
    i = (i + (i >>> 4)) & 0x0f0f0f0f;
    i = i + (i >>> 8);
    i = i + (i >>> 16);
    return i & 0x3f;
}
于 2017-05-29T21:15:23.517 回答
0

任何处理有限大小输入的算法都具有O(1).

bitCount适用于有限大小的输入。

因此bitCount复杂度为O(1)

于 2021-07-06T16:06:46.923 回答