所以,我对O(log n)的理解是时间呈线性增加,而n呈指数增长。我试图将这种理解应用于来自interviewbit的以下函数:
int a = 0, i = N;
while (i > 0) {
a += i;
i /= 2;
}
我似乎无法理解为什么时间复杂度为O(log n)。任何人都可以打破这个并解释原因吗?
答案 0 :(得分:3)
在此示例中,您需要计算循环迭代次数,因为这些迭代次数决定了算法所需的总时间。
由于i
在每次迭代中除以2,我们对循环进行log N
次迭代(使用log base 2更容易理解,但这并不重要)。
示例:对于N = 64,您有7次迭代,第一次i = 64,第二次i = 32,然后是16,8,4,2,1最后循环在i=1/2
分割后停止给0(整数运算)。如果将N加倍为128,则有8次迭代。如果再次将N加倍为256,则有9次迭代。在这里,您可以看到N的指数增长,同时循环迭代次数(即时间)呈线性增长。