【问题标题】:Why is the runtime of this algorithm (n^2)*(n^2 + 1)/2(i.e. O(n/4))?为什么这个算法的运行时间是 (n^2)*(n^2 + 1)/2(即 O(n/4))?
【发布时间】:2016-11-13 18:42:46
【问题描述】:

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

{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。

提前感谢您的帮助。

【问题讨论】:

    标签: algorithm performance runtime


    【解决方案1】:

    第二个循环被执行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
    

    【讨论】:

    • 这真的很有意义。因此,如果我要查看内部循环,它会从 1 变为 n^2,因为循环首先执行一次,然后执行两次直到 n^2。总和给我们 n^2(n^2 + 1)。非常感谢,伙计。注意:这就是我的意图,我现在对其进行了编辑,感谢您指出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2011-01-29
    • 2019-03-23
    • 2020-12-16
    相关资源
    最近更新 更多