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

Math 增加二进制计数器的时间复杂度?,math,big-o,time-complexity,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(logn),但我不明白为什么——循环看起来可能访问所有位 我遗漏了什么?如果您有一个二进制计数器表示数字n,那么总共会有Θ(logn)个不同的位(因为每个位表示指数级的越来越大的值)。如果您查看数量b,即位的数量,那么应该很容易看到上述算法

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

 Increment(B)
    i=0
    while B[i]=1
       flip B[i] to zero
       increment i by 1
    b[i]=1
我被告知运行时是O(logn),但我不明白为什么——循环看起来可能访问所有位


我遗漏了什么?

如果您有一个二进制计数器表示数字n,那么总共会有Θ(logn)个不同的位(因为每个位表示指数级的越来越大的值)。如果您查看数量b,即位的数量,那么应该很容易看到上述算法的运行时是O(b),因为每个位最多访问一次。然而,由于b=Θ(logn),时间复杂度最终为O(logn)


希望这有帮助

如果您有一个表示数字n的二进制计数器,那么总共将有Θ(logn)个不同的位(因为每个位表示指数级的越来越大的值)。如果您查看数量b,即位的数量,那么应该很容易看到上述算法的运行时是O(b),因为每个位最多访问一次。然而,由于b=Θ(logn),时间复杂度最终为O(logn)


希望这有帮助

logn
是包含数字
n
所需的
B
的宽度。请举例说明。注
logn
是包含数字
n
所需的
B
的宽度。请举例说明