Java - bitCount() 的大 O?
Java - Big O of bitCount()?
位计数的大 O 是什么?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。
特别是此代码(其中 x = 4,y = 1):
return Integer.bitCount(x^y);
考虑到它的实现,该方法由六个顺序执行的 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;
}
它是 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;
}
任何适用于有限大小输入的算法的复杂度为 O(1)
。
bitCount
适用于有限大小的输入。
因此 bitCount
的复杂度为 O(1)
。
位计数的大 O 是什么?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。
特别是此代码(其中 x = 4,y = 1):
return Integer.bitCount(x^y);
考虑到它的实现,该方法由六个顺序执行的 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;
}
它是 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;
}
任何适用于有限大小输入的算法的复杂度为 O(1)
。
bitCount
适用于有限大小的输入。
因此 bitCount
的复杂度为 O(1)
。