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
的宽度。请举例说明