这个算法是N ^ 2吗?

时间:2014-06-30 23:58:52

标签: algorithm big-o

int sum = 0;
for (int i = 1; i <= N; i++)
    for (int j = 1; j <= i*i; j++)
        sum++;

这种复杂性是1 + 2^2 + 3^2 + 4^2 ... + N^2吗?如何用big-o表示法表示它?

4 个答案:

答案 0 :(得分:6)

sumN(N+1)(2N+1)/6,因此您的算法为O(N^3)

如果您扩展总和,则1/3 * N^3 + ...

您可以通过在针对sum的不同值运行算法后绘制N的值来简单地看到它:enter image description here

答案 1 :(得分:1)

直截了当地使用Sigma表示法:

enter image description here

答案 2 :(得分:1)

另一种看待它的方法是使用“最坏情况”分析。 最初,我们有:

  • 外部for循环将运行N
  • 内部for循环将运行i*i

这可能令人困惑,因为i似乎正在根据外部for循环进行更改。 但是,在“最坏情况”情景中,i获得的最大值为N

因此,在我们的分析中,只需替换N而不是i。 现在我们有:

  • 外部for循环将运行N
  • 内部for循环将运行N*N

这种情况的时间复杂性当然是O(N³)。

答案 3 :(得分:-1)

您可以随时使用直观的方式。

  • 对于i = 2秒循环1次,第一次循环1次。 1 * 1
  • 对于i = 3秒循环9次,首次循环2次。 9 * 2
  • 对于i = 4秒循环16次,第一次循环3次16 * 3
  • 对于i = 5秒循环25次,第一次循环4次。 25 * 4

。 。

你可以轻松看到这个模式。它是(n2)*(n-1)因此它的大o应该是O(n3)