带有嵌套for循环和单个for循环的Big O表示法

时间:2016-10-06 02:09:36

标签: big-o

    int a = 0, b = 0;    
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            a = a + j;
        }
    }

    for (k = 0; k < N; k++) {
        b = b + k;
    } 

我正在努力解决上述时间的复杂性。

我原以为O(n^2 + n)我的理由是:

n^2 : nested for loops
n   : Adding the single loop

但是,确认的答案是O(n^2)

我的问题是为什么包含最后一个for循环,因为它本身就是O(n)

非常感谢任何建议,

4 个答案:

答案 0 :(得分:2)

使用Big-O表示法,您可以使用最高阶分量并删除其他乘法因子。原因是&#34; n&#34;在指数过程中变大,添加另一个&#34; n&#34;并没有真正改变它。

如果n=1000000n^21000000000000。说+ n使其成为10000001000000并没有产生重大影响。随着n变大,影响甚至可以忽略不计。

对于像n log n这样的事情,反之亦然,你会增加一个数量级,因此保持乘法因子会产生明显的影响。

答案 1 :(得分:2)

你不需要提及O(n),因为它的花生与O(n ^ 2)分类相比较。与你的算法有O(n)部分和O(1)部分的想法相同 - 你不称它为O(n + 1),你称之为O(n)。

这篇文章有一个很好的解释: https://www.interviewcake.com/article/java/big-o-notation-time-and-space-complexity

答案 2 :(得分:1)

技术上正确的是运行时为O(n ^ 2 + n),因为初始循环是二次的,第二个是线性的。但是,使用big-O表示法的约定是从big-O表达式中删除常数因子和低阶项,因为big-O表示法是关于长期的 限制行为。因此,O(n ^ 2)的给定答案是计算运行时的更好方法。你的答案在技术上并不正确,但它不被认为是好的数学风格。

答案 3 :(得分:1)

第一组嵌套循环是O(N ^ 2),第二组循环是O(N)。这是O(max(N ^ 2,N)),其为O(N ^ 2)。

引自:http://pages.cs.wisc.edu/~vernon/cs367/notes/3.COMPLEXITY.html&gt;&gt;测试你自己#3