递增二进制计数器的时间复杂度?

时间:2013-09-25 04:27:51

标签: math big-o time-complexity

我有以下伪代码用于递增二进制计数器:

 Increment(B)
    i=0
    while B[i]=1
       flip B[i] to zero
       increment i by 1
    b[i]=1

我被告知运行时是O(log n),但我看不出原因 - 循环看起来可能会访问所有位。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果你有一个表示数字n的二进制计数器,则总共有Θ(log n)个不同的位(因为每个位代表指数级更大和更大的值)。如果你查看数量b,比特数,那么应该很容易看出上述算法的运行时间是O(b),因为每个位最多访问一次。但是,由于b =Θ(log n),时间复杂度最终为O(log n)。

希望这有帮助!