嵌套循环的大O,其中内循环取决于i * n和外循环的i * i

时间:2014-09-08 00:01:01

标签: big-o nested-loops

以下嵌套循环的Big-Oh是什么:

sum=0;
for(i=0;i<n;i++)
    for(j=0;j<i*n;j++)
        sum+=i;

sum=0;
for(i=0;i<n;i++)
    for(j=0;j<i*i;j++)
        sum+=i;

我相信它是O(n ^ 2),但我遇到过的都是使用n作为测试的两个循环,所以我不知道O(n ^ 2)是否正确。如果有人可以验证我的理解或解释我为什么错,我会很感激。谢谢!

1 个答案:

答案 0 :(得分:4)

我会说它们都是O(n^3),因为在这两种情况下,内循环都是O(n^2)而外循环是O(n)。当然,它们的运行时间远小于n ^ 3次,但是如果你将运行时作为n的函数绘制,当n变大时,你会发现形状看起来更像是立方而不是二次。我的证据是,如果你为第一个展开总和,你会得到:

equation1

因为你有n个术语,每个术语都是O(n^2),所以整个事情都是O(n^3),尽管这个术语非常小O(n^3)

对于第二个:

enter image description here

甚至小于第一个,但仍然是O(n^3)