Algorithm 时间复杂度是O(N)还是O(logn)? i=1; 而(i

Algorithm 时间复杂度是O(N)还是O(logn)? i=1; 而(i,algorithm,performance,time-complexity,Algorithm,Performance,Time Complexity,将i*=2误读为i+=2 它只是O(N),更准确地说是O(N/2) 为什么你会认为这是O(logn)?时间复杂度与周期数成正比。周期数正好等于log(N)/log(2),其中log是任何对数。或者只是Log2(N),其中Log2是以2为底的对数。因此它是O(logn)。示例:N=10 而循环运行1、2、4、8、16(5次) 如果将N加倍,N=20,则时间复杂度也会加倍,如果是O(N)。 但是,该循环运行1、2、4、8、16、32(6次) 同样,N=40,循环运行1,2,4,8,16,32,64(

将i*=2误读为i+=2

它只是O(N),更准确地说是O(N/2)


为什么你会认为这是O(logn)?

时间复杂度与周期数成正比。周期数正好等于
log(N)/log(2)
,其中log是任何对数。或者只是
Log2(N)
,其中Log2是以2为底的对数。因此它是O(logn)。

示例:N=10 而循环运行1、2、4、8、16(5次)

如果将N加倍,N=20,则时间复杂度也会加倍,如果是O(N)。 但是,该循环运行1、2、4、8、16、32(6次)

同样,N=40,循环运行1,2,4,8,16,32,64(7次)


这是O(logn),因为时间复杂度随着N的增大而减小。

i*=2或i/=2的时间复杂度将是相同的,它将是log2(N)。

因为对于以下代码,它的O(logn):for(int i=1;iO(log(N))-对数示例:for(int i=1;i您应该看到这一点以获得更正确的答案:此答案仅部分正确,如中所述:能否请您添加更多关于为什么为log2(n)的解释。这将有助于提高答案的质量。
i = 1;
while(i<N) {
   i*=2;
}