java 中 BitSet 的 Set 操作的时间复杂度是多少?
What is the Time Complexity of Set operation of a BitSet in java?
我有一个场景,我必须将 BitSet 索引的范围设置为 1。
所以如果我使用
/*
*Code snippet
*/
BitSet myBitSet = new BitSet(100);
myBitSet.set(10, 50);
//**************************
以上代码的时间复杂度是多少?它会遍历 40 个元素还是会执行某种位操作?
出于某种原因,它没有在 Javadoc 中指定,但 Oracle 的实现肯定是 O(1) 获取、设置、翻转和清除一个参数; O(N) 有两个参数。 'Vector of bits' 可能是一个提示。
因为它使用数组,所以 set/get 都是 O(1)
设置操作将设置位(fromIndex 将为 10,toIndex 将为 49)
它将遍历从 10 到 49 的 40 个元素。是的,复杂度将为 O(1)
对于单个位,它将是 O(1),设置 n 位的复杂度是 O(N)。
对于怀疑论者:设置 n 位是 O(N),因为设置 10_000 位比设置 1_000 位花费大约 10 倍的时间。
也就是说,调用 myBitSet.set(10,50)
比编写 for (int i=10; i<=50; i++) myBitSet.set(i);
更有效
我有一个场景,我必须将 BitSet 索引的范围设置为 1。 所以如果我使用
/*
*Code snippet
*/
BitSet myBitSet = new BitSet(100);
myBitSet.set(10, 50);
//**************************
以上代码的时间复杂度是多少?它会遍历 40 个元素还是会执行某种位操作?
出于某种原因,它没有在 Javadoc 中指定,但 Oracle 的实现肯定是 O(1) 获取、设置、翻转和清除一个参数; O(N) 有两个参数。 'Vector of bits' 可能是一个提示。
因为它使用数组,所以 set/get 都是 O(1)
设置操作将设置位(fromIndex 将为 10,toIndex 将为 49) 它将遍历从 10 到 49 的 40 个元素。是的,复杂度将为 O(1)
对于单个位,它将是 O(1),设置 n 位的复杂度是 O(N)。
对于怀疑论者:设置 n 位是 O(N),因为设置 10_000 位比设置 1_000 位花费大约 10 倍的时间。
也就是说,调用 myBitSet.set(10,50)
比编写 for (int i=10; i<=50; i++) myBitSet.set(i);