如何将我对O(log N)的理解应用于此特定函数?

时间:2016-06-22 14:06:52

标签: algorithm big-o

所以,我对O(log n)的理解是时间呈线性增加,而n呈指数增长。我试图将这种理解应用于来自interviewbit的以下函数:

int a = 0, i = N;
    while (i > 0) {
        a += i;
        i /= 2;
    }

我似乎无法理解为什么时间复杂度为O(log n)。任何人都可以打破这个并解释原因吗?

1 个答案:

答案 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的指数增长,同时循环迭代次数(即时间)呈线性增长。