C++11 c++;位集逻辑操作是否在O(日志n)中?
根据这篇文章,性能是O(n),我如何使它成为O(logn)。C++11 c++;位集逻辑操作是否在O(日志n)中?,c++11,time-complexity,bitwise-operators,std-bitset,C++11,Time Complexity,Bitwise Operators,Std Bitset,根据这篇文章,性能是O(n),我如何使它成为O(logn)。 谢谢 答案是你没有 假设您有一个n大小的位集。 让我们看看异或运算符^。 显然,它必须查看两个操作数中的每一位,因此它进行2n查找。 这导致复杂性为O(n) 您可以使用汇编指令,例如一次执行32位,因此操作数为(n+31)/32,但这不会改变复杂性为O(n)。在所有的复杂度都被计算后,n趋于无穷大,常数因子被忽略。我认为这要视情况而定。你必须提供更多信息。我认为,std::bitset的O(1)解决方案是完全可能的,但不适用于std:
谢谢 答案是你没有 假设您有一个
n
大小的位集。
让我们看看异或运算符^
。
显然,它必须查看两个操作数中的每一位,因此它进行2n
查找。
这导致复杂性为O(n)
您可以使用汇编指令,例如一次执行32位,因此操作数为
(n+31)/32
,但这不会改变复杂性为O(n)
。在所有的复杂度都被计算后,n
趋于无穷大,常数因子被忽略。我认为这要视情况而定。你必须提供更多信息。我认为,std::bitset
的O(1)解决方案是完全可能的,但不适用于std::bitset
。在小于O(n)的运算中,无法对大小为O(n)的位集执行按位运算,除非我们这里有A,否则无法执行。能否执行取决于计算模型,但这可能被视为“欺骗”。在婴儿车模型中很容易。