我有以下伪代码用于递增二进制计数器:
Increment(B)
i=0
while B[i]=1
flip B[i] to zero
increment i by 1
b[i]=1
我被告知运行时是O(log n),但我看不出原因 - 循环看起来可能会访问所有位。
我错过了什么?
答案 0 :(得分:1)
如果你有一个表示数字n的二进制计数器,则总共有Θ(log n)个不同的位(因为每个位代表指数级更大和更大的值)。如果你查看数量b,比特数,那么应该很容易看出上述算法的运行时间是O(b),因为每个位最多访问一次。但是,由于b =Θ(log n),时间复杂度最终为O(log n)。
希望这有帮助!