Java - bitCount() 的大 O?

The*_*heo 3 java big-o bitcount

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

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

return Integer.bitCount(x^y);
Run Code Online (Sandbox Code Playgroud)

Red*_*III 6

鉴于其实现,该方法由六个按顺序执行的 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;
}
Run Code Online (Sandbox Code Playgroud)

  • JVM 可以自由地以不同于您在 JDK 源代码中看到的代码的方式实现它,事实上它确实如此,因为它是一个“已知函数”。通常它会在支持它的平台(大多数有趣的平台)上编译为单个“popcnt”指令。但这并没有真正改变结论(尽管它确实意味着 `Integer.bitCount()` 和 `Long.bitCount()` 通常需要相同的时间 - 如果您查看源代码,这不会是您的结论。 (3认同)