所以,我的导师给我们的问题让我们找到了这个算法的运行时间:
{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。
提前感谢您的帮助。
答案 0 :(得分:0)
第二个循环执行i
次。
因此,如果i
从1
变为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