【问题标题】:c++ bitset logical operations in O(log n)?O(log n)中的c ++位集逻辑运算?
【发布时间】:2017-11-15 03:37:15
【问题描述】:

根据这篇文章Performance of doing bitwise operations on bitsets 的性能是 O(n) 我如何使它成为 O(log n)。 谢谢。

【问题讨论】:

  • 我会说这取决于。您将不得不提供更多信息。我认为std::bitset<8> 的 O(1) 解决方案是完全可能的,但不适用于std::bitset<2048>
  • 您不能在小于 O(n) 的操作中对大小为 O(n) 的位集进行按位操作
  • 除非我们在这里有XY problem,否则你不能这样做。
  • 能否做到取决于你的计算模型,但这可能被认为是“作弊”。例如,在 PRAM 模型中,这很容易。

标签: c++11 time-complexity bitwise-operators std-bitset


【解决方案1】:

答案是你不知道。

假设您有一个n 大小的位集。 让我们看一下异或运算符^。 它显然必须查看两个操作数中的每一位,因此它会进行2n 查找。 这导致复杂度为O(n)

您可以使用汇编指令,例如一次执行 32 位,因此操作数为 (n+31)/32,但这并没有改变复杂度为 O(n)。在计算了n 的所有复杂度之后,趋向于无穷大,并且忽略了常数因素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多