查找第一个设置位算法只是扫描位数组以找到第一个设置位,这实际上是一个基本的顺序搜索算法。
假设我们可以访问设置和清除数组位的操作,是否可以通过以下要求降低分摊的复杂性:
作为一个例子,一个简单的优化可能是有一个额外的整数保存最后清除的位索引。然后,后续搜索将在O(1)时间内返回。但在我看来,这根本不会影响摊销的运行时间,因为这种简单的改进无法定义算法最坏情况的任何界限。但是像这样的一系列改进可能会降低摊销的时间复杂度?或者不是?
此致
答案 0 :(得分:1)
我打算使用位运算符拼凑一个简单的二进制搜索,但当然斯坦福比特错综复杂的黑客页面有:http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightBinSearch。这给出了n位表示的O(log n)。它不使用位设置/清除操作,只是测试。我认为这是允许的吗?
在该类别中(右侧为零),您可能还有其他几种方法。