for(i=1;i<n*n;i++)
for(k=1,l=1;l<n;k=k+2,l=l+k)
foo;
我如何估计这样的构造的时间复杂度?
答案 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来正式推断增长复杂性的确切顺序,如下所示: