时间复杂度是O(N)还是O(Log N)?

时间:2016-10-16 01:48:15

标签: algorithm performance time-complexity

i = 1;
while(i<N) {
   i*=2;
}

我认为上面代码的时间复杂度是O(N),但我不确定。如果你认为它的O(Log N)和原因,请告诉我吗?

4 个答案:

答案 0 :(得分:4)

时间复杂度si与周期数成比例。并且周期数正好等于Log(N)/Log(2),其中Log是任意对数。或者只是Log2(N),其中Log2是以2为基数的对数。因此它是O(Log N)。

答案 1 :(得分:1)

示例:N = 10 while循环运行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(log N),因为随着N变大,时间复杂度降低。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

误读i * = 2,因为i + = 2。

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

为什么你认为这将是O(log N)?