i = 1;
while(i<N) {
i*=2;
}
我认为上面代码的时间复杂度是O(N),但我不确定。如果你认为它的O(Log N)和原因,请告诉我吗?
答案 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)?