为什么这个算法的运行时间(n ^ 2)*(n ^ 2 + 1)/ 2(即O(n / 4))?

时间:2016-11-13 18:42:46

标签: algorithm performance runtime

所以,我的导师给我们的问题让我们找到了这个算法的运行时间:

{n > 0}
    i := 1;
    while i ≤ n^2
    j := 1;
    while j ≤ i
        j := j + 1;
    endwhile
    i := i + 1;
endwhile

在解决方案中,这里的运行时是 n ^ 2(n ^ 2 + 1)/ 2,即Θ(n ^ 4)。

所以,我得到第一个while循环的运行时间为n ^ 2,但为什么第二个循环的运行时间为(n ^ 2 + 1)/ 2。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

第二个循环执行i次。

因此,如果i1变为n^2,则运行时间为

1 + 2 + 3 + ... + n^2 

现在请注意

1 + 2 + ... + k = k*(k+1)/2

因此,如果您将k替换为n^2,则会在n^2*(n^2+1)中获得运行时。 我认为正确的身份是:

{n > 0}
    i := 1;
    while i ≤ n*n
      j := 1;
      while j ≤ i
        j := j + 1;
      endwhile
      i := i + 1;
endwhile