以下程序的时间复杂度是多少?

时间:2012-01-17 00:47:05

标签: algorithm time complexity-theory

以下程序的时间复杂度是多少?如何计算复杂度?复杂性的上限和下限是多少?

for(i=n;i<=n^2;i++)
   for(j=1;j<=i*log(i);j++)
      a[i][j]+=3*i*j;

2 个答案:

答案 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,但答案是相同的