Time complexity 为什么像i=i*2这样的代码在循环中被认为是O(logN)?

Time complexity 为什么像i=i*2这样的代码在循环中被认为是O(logN)?,time-complexity,big-o,logarithm,Time Complexity,Big O,Logarithm,为什么因为i=i*2,循环的运行时被认为是O(logN) for(inti=1;i看看1024=210。你需要将数字1加倍多少次才能得到1024 Times 1 2 3 4 5 6 7 8 9 10 Result 2 4 8 16 32 64 128 256 512 1024 所以你必须运行双倍循环十次才能得到210,一般来说,你必须运行双倍循环n次才能得到2n。但是什么是n?它是log2n,所以

为什么因为i=i*2,循环的运行时被认为是O(logN)

for(inti=1;i看看1024=210。你需要将数字1加倍多少次才能得到1024

Times    1   2   3   4    5    6    7    8     9      10
Result   2   4   8   16   32   64  128  256   512    1024

所以你必须运行双倍循环十次才能得到210,一般来说,你必须运行双倍循环n次才能得到2n。但是什么是n?它是log2n,所以一般来说,如果n是2的某个幂,循环必须运行log2n次才能达到它。

要使算法处于
O(logN)
,对于它需要的任何n(大约)日志N个步骤。在N=32(其中日志32=5)的示例中,可以看到:

i = 1 (start)
i = 2
i = 4
i = 8
i = 16
i = 32 (5 iterations)
i = 64 (abort after 6 iterations)
一般来说,在
x
迭代之后,
i=2^x
保持不变。要达到
i>N
您需要
x=logn+1


PS:当谈到复杂性时,
log
base(2,10,e,…)是不相关的。此外,如果你有
ii1开始,然后在每次迭代中用2乘以它,这意味着:

在一些K2^(K-1)将大于(或等于)N


这意味着N你可以非常简单地证明它

索赔: 对于
t
th(0基)迭代,
i=2^t
通过归纳法证明

Base:
2^0=1
,实际上在第一次迭代中,
i=1

步骤:对于一些
t+1
i
的值是
2*i(t)
(其中
i(t)
t
迭代中
i
的值)。根据归纳假设,我们知道
i(t)=2^t
,因此
i(t+1)=2*i(t)=2*t=2^(t+1)
,权利要求成立


现在,让我们检查一下停止条件。我们迭代循环,而
我确定您的意思是包含乘法的行吗?整个循环具有日志复杂性。我的意思是,整个循环,对此仍然是新的。
i = 1 (start)
i = 2
i = 4
i = 8
i = 16
i = 32 (5 iterations)
i = 64 (abort after 6 iterations)