减少查找第一个设置位的分摊时间复杂度

时间:2011-09-15 08:15:02

标签: algorithm complexity-theory

查找第一个设置位算法只是扫描位数组以找到第一个设置位,这实际上是一个基本的顺序搜索算法。

假设我们可以访问设置和清除数组位的操作,是否可以通过以下要求降低分摊的复杂性:

  • 可以使用额外的内存,但它应该是常量,O(1)。
  • 无法对位数组进行排序或更改。

作为一个例子,一个简单的优化可能是有一个额外的整数保存最后清除的位索引。然后,后续搜索将在O(1)时间内返回。但在我看来,这根本不会影响摊销的运行时间,因为这种简单的改进无法定义算法最坏情况的任何界限。但是像这样的一系列改进可能会降低摊销的时间复杂度?或者不是?

此致

1 个答案:

答案 0 :(得分:1)

我打算使用位运算符拼凑一个简单的二进制搜索,但当然斯坦福比特错综复杂的黑客页面有:http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightBinSearch。这给出了n位表示的O(log n)。它不使用位设置/清除操作,只是测试。我认为这是允许的吗?

在该类别中(右侧为零),您可能还有其他几种方法。