奇怪的嵌套循环的时间复杂性

时间:2011-12-30 02:58:01

标签: loops big-o time-complexity

for(i=1;i<n*n;i++)
    for(k=1,l=1;l<n;k=k+2,l=l+k)
        foo;

我如何估计这样的构造的时间复杂度?

3 个答案:

答案 0 :(得分:2)

循环查看这个循环:

外环从1到n的平方,因此O(n^2)
内循环从1到n,但步骤是1,4,9,16 ......而不是1,2,3,4 ...因此O(sqrt(n))

嵌套循环会增加复杂性,因此我们选择O(sqrt(n)*n^2)O(n^2.5)

答案 1 :(得分:1)

一般来说,ridecar2是正确的,但要小心,因为有时候你会得到一个技巧问题。你的数据大小是n * n数组,这意味着该数组的迭代是o(n)而不是o(n ^ 2),尽管它看起来像:

for(int i=0; i<n; i++)
 for(int j=0; j<n; j++)
     doStuff();

答案 2 :(得分:0)

您的算法可以简化如下:

for ( i = 1; i < n * n; i ++ )
    for ( l = 1 ; l * l < n ; l = l ++ )
        foo;

因此,您可以使用Sigma Notation来正式推断增长复杂性的确切顺序,如下所示:

enter image description here