以下程序的时间复杂度是多少?如何计算复杂度?复杂性的上限和下限是多少?
for(i=n;i<=n^2;i++)
for(j=1;j<=i*log(i);j++)
a[i][j]+=3*i*j;
答案 0 :(得分:0)
在你的外环中,你将从n-> n ^ 2开始,这是(n ^ 2-n)次迭代,即O(n ^ 2)。
在你的内循环中,你将从1&gt;大约(n ^ 2)log(n ^ 2)开始,这是O((n ^ 2)log(n))
a[i][j]+=3*i*j;
是O(1),所以你没有贡献。
把它放在一起,你有O(n ^ 2 * n ^ 2 * log(n)),即O(n ^ 4 log(n))
答案 1 :(得分:0)
迈克的回答是正确的,只是以不同的方式扩展步骤
内循环:const * i * log(i) 外循环:const(i超过1:n ^ 2)的const * i * log(i)
O(算法)= O(i * log(i)的总和(i超过1:n ^ 2))
从http://en.wikipedia.org/wiki/Summation我们发现
总和(i超过1:m)(i * log(i))= Theta(m ^ 2 * log(m))
替换m = n ^ 2我们得到
O(算法)= O(n ^ 2)^ 2 log(n ^ 2)= O(n ^ 4)log(n)(消除2)(实际上是算法的θ)
编辑:我刚注意到外环是我在n:n ^ 2,但答案是相同的