我很难理解为什么这段代码的时间复杂度是O(log 2^n):
for (int i = n; i>=1; i=i/2){
sum = i+j;
}
我原本以为时间复杂度是O(n)。
这是O(log_2 n)
。因为它将一直运行,直到n
变成1。
在第k步之后,假设整个事情都变成1。
所以n/2^k = 1
k=log_2 n
复杂性为O(log_2 n)
i
中)会减少...就像首先i=n,然后i=n/2,然后i=n/4,然后i=n/8...
。 - user27367382
为底的 log_2 n
。 - user2736738
i = i / 2
这一行代码了吗? - Elliott Frischi
除以2,因此如果i
从1024开始,则为512、256、128、64、32、16、8、4、2、1,然后是0(由于整数除法),此时循环退出。因此,每次将n
加倍,您将在循环退出之前获得1个更多的迭代。这就是log (base 2) of n
的定义。 - StriplingWarrior