无法分析此函数的运行时

Can't analyze this function's runtime

你好,我有这个问题,但我错了,我就是不明白。 这是关于获取此嵌套循环的准确 运行时间。

具体到"for i=2, inner loop runtime :2n-2"我都能看懂。但是,之后就看不懂了

问题1)

首先,它显示 For i=n, inner loop runtime is n+1。但从我的角度来看,这没有意义。让我假设 n=3 并且外循环在 i=3 时执行它的最后一个循环,然后 j 将 运行 内循环 3 次(从 3 到 5,因为 j=3=n < 2*n=2*3 =6).但是,答案是 inner loop runtime is n+1,如果我将 3 放入 n+1,它会变成 4 次。我不明白为什么这个答案是正确的。

问题2)

如何从 2n+(2n-1)+(2n-2)+...+(n+1) 获得答案 1.5n^2 + 0.5n 的最后一种形式?你能告诉我在数学方面前者如何变成后者的总体步骤吗?具体说说 2n + (2n-1) + (2n-2) + ... + (n+1) 是怎么变成 n*n + (1+2+3+...+n) 的?我认为公式 n(n+1)/2 在这里与 n=(n+1) 一起使用,但它对我不起作用。

这里有没有用到什么公式?

问题 1

你是对的,因为第i个内循环运行时间应该是2n-i,因此对于i=n,内循环运行时间应该是n。答案是错误的。

问题 2

正确答案应该是

2n+(2n-1)+...+n

你可以做的是构造另一个序列和

n+(n+1)+...+2n

你将 2n-i 与 n+i 匹配,对于所有 i=0..n 因此你有 3n 的 (n+1) 项,所以 2 个完全相同序列的总和是 3n(n+1) 因此 1 个序列的总和是 1.5n(n+1)

或者你可以直接套用等差数列和的公式,请参考wiki页面 https://en.wikipedia.org/wiki/Arithmetic_progression