1
ynyounuo 2018-03-27 15:37:32 +08:00 1
随手瞎算的:
T(1) = 1 T(2) = T(1) + T(1/2) + cn = 1 + T(1/2) + cn T(4) = T(2) + T(1) + cn = (1 + T(1/2) + cn) + 1 + cn = 1 + 1 + T(1/2) + 2 * cn T(8) = T(4) + T(2) + cn = (1 + 1 + T(1/2) + 2 * cn) + (1 + T(1/2) + cn) + cn = 1 + 1 + 1 + 2T(1/2) + 3 * cn T(n) = log_2(n) + (log_2(n) - 1) * T(1/2) + c * log_2(n) * n Mathematica 的结果: |
2
hx1997 OP @ynyounuo 完了,跟我算的完全不一样… 你的是 O(nlogn),Mathematica 的结果是 O(n^2),我的是 O(n)……
|
5
ynyounuo 2018-03-27 19:50:57 +08:00 via iPhone
|
7
Xs0ul 2018-03-27 22:25:03 +08:00 2
@hx1997 #6 试试变量代换,s = log_2(n), n = 2 ^ s
递推式等价的应该变成 T(2^s) = T(2^(s-1)) + T(2^(s-2)) + c * 2 ^ s 定义 R(s) = T(2^s), 改写为 R(s) = R(s-1) + R(s-2) + c * 2 ^ s 齐次部分是斐波那契数列, 最后的 c * 2 ^ s,凑了下是 G(s) = c * 2 ^ (s+2) 所以 R(s) = F(s) + G(s),其中 F 是斐波那契的解 最后得到 T(n) = R(log_2(n)) = F(log_2(n)) + G(log_2(n)) 以上完全是按照函数来做的,因为原来定义里有 1/2,已经不算是数列了 |