这个三重循环的复杂性?

时间:2016-12-06 07:11:39

标签: c++ time-complexity

for(i=1;i<=2237;i++)
{
    for(j=i+1;j<=2237;j++)
    {
        for(k=1;k*(i*i+j*j)<=5000000;k++)
        {
            a[k*(i*i+j*j)]=1;
        }
    }
}

这里5 * 10 ^ 6可以假设为n,2237近似为sqrt(n)。我能够弄清楚外部2个循环的复杂性,它是让我困惑的最里面的循环。

1 个答案:

答案 0 :(得分:0)

如果输入指示最内层循环中的迭代次数(正如您所描述的那样):

外循环运行sqrt(N)次,然后在外循环的每次迭代中,中间循环在平均值 sqrt(N)/2上运行。然后内循环在中间循环的每次迭代中运行N次。

所以.... sqrt(N) * sqrt(N)/2 * N == (N-Squared / 2)

因此O(N-Squared)

如果输入指示最外层循环中的迭代次数,则最内层循环迭代计数始终是外部交互计数的平方值:

`N * N/2 * N-Squared = N**4 (N to the power of 4)`.  Hence, `O(N**4)`