【发布时间】:2012-11-20 09:57:55
【问题描述】:
有人可以帮我解决这个问题吗?
用迭代法求解。 T(n) = T(n-1) +n
非常感谢您解释步骤。
【问题讨论】:
-
您是否需要使用特定的编程语言,或者您要求的是伪代码?
-
伪代码..感谢您的即时回复! :D
-
你熟悉递归吗?
-
@cruxi 不,我不是。不完全。
有人可以帮我解决这个问题吗?
用迭代法求解。 T(n) = T(n-1) +n
非常感谢您解释步骤。
【问题讨论】:
T(n) = T(n-1) + n
T(n-1) = T(n-2) + n-1
T(n-2) = T(n-3) + n-2
以此类推,您可以将 T(n-1) 和 T(n-2) 的值代入 T(n) 以大致了解该模式。
T(n) = T(n-2) + n-1 + n
T(n) = T(n-3) + n-2 + n-1 + n
.
.
.
T(n) = T(n-k) + kn - k(k-1)/2 ...(1)
对于基本情况:
n - k = 1 so we can get T(1)
=> k = n - 1
代入(1)
T(n) = T(1) + (n-1)n - (n-1)(n-2)/2
你可以看到的顺序是 n2 => O(n2)。
【讨论】:
展开!
T(n) = T(n-1) + n = T(n-2) + (n-1) + n = T(n-3) + (n-2) + (n-1) + n
以此类推,直到
T(n) = 1 + 2 + ... + n = n(n+1)/2 [= O(n^2)]
前提是T(1) = 1
【讨论】:
在伪代码中使用迭代:
function T(n) {
int result = 0;
for (i in 1 ... n) {
result = result + i;
}
return result;
}
【讨论】:
另一种解决方案:
T(n) = T(n-1) + n
= T(n-2) + n-1 + n
= T(n-3) + n-2 + n-1 + n
// we can now generalize to k
= T(n-k) + n-k+1 + n-k+2 + ... + n-1 + n
// since n-k = 1 so T(1) = 1
= 1 + 2 + ... + n //Here
= n(n-1)/2
= n^2/2 - n/2
// we take the dominating term which is n^2*1/2 therefor 1/2 = big O
= big O(n^2)
【讨论】:
简单方法:
T (n) = T (n - 1) + (n )-----------(1)
//now submit T(n-1)=t(n)
T(n-1)=T((n-1)-1)+((n-1))
T(n-1)=T(n-2)+n-1---------------(2)
now submit (2) in (1) you will get
i.e T(n)=[T(n-2)+n-1]+(n)
T(n)=T(n-2)+2n-1 //simplified--------------(3)
now, T(n-2)=t(n)
T(n-2)=T((n-2)-2)+[2(n-2)-1]
T(n-2)=T(n-4)+2n-5---------------(4)
now submit (4) in (2) you will get
i.e T(n)=[T(n-4)+2n-5]+(2n-1)
T(n)=T(n-4)+4n-6 //simplified
............
T(n)=T(n-k)+kn-6
**Based on General form T(n)=T(n-k)+k, **
now, assume n-k=1 we know T(1)=1
k=n-1
T(n)=T(n-(n-1))+(n-1)n-6
T(n)=T(1)+n^2-n-10
According to the complexity 6 is constant
So , Finally O(n^2)
【讨论】: