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

标签 algorithm big-o

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

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

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

最佳答案

在此示例中,您需要计算循环迭代次数,因为这些迭代的次数决定了算法所需的总时间。

i在每次迭代中除以 2,我们有 log N循环的迭代(使用以 2 为底的对数更容易理解,但这并不重要)。

示例:对于 N=64,您有 7 次迭代,第一次迭代 i=64,第二次迭代 i=32,然后是 16,8,4,2,1,最后循环在除 i=1/2 后停止。给出 0(整数算术)。如果将 N 加倍到 128,则有 8 次迭代。如果将 N 再次加倍到 256,则有 9 次迭代。在这里,您可以看到 N 呈指数增长,同时循环迭代次数(即时间)呈线性增长。

关于algorithm - 我如何将我对 O(log N) 的理解应用于这个特定函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970486/

相关文章:

algorithm - 我如何优化 O(n^2)

java - 大 O 与递归

algorithm - 提高函数的运行时间意味着什么?

java - 这段代码是 O(n) 还是 O(logn)?

java - 快速排序 Java 。 ArrayIndexoutofBoundsException异常

没有动态规划的算法,效率较低的解决方案

python - 将此程序中所有可能路径返回到嵌套列表的算法

algorithm - 什么是恒定摊销时间?

algorithm - Dijkstra 算法在 O ((V+E) log W) 时间内计算从给定源顶点 s 的最短路径

algorithm - 从运行时分析中推导出时间复杂度