需要一点帮助!这是我到目前为止使用后向替换的原因:
T(n) = 2T(n/2) + sqrt(n), where T(1) = 1, and n = 2^k
T(n) = 2[2T(n/4) + sqrt(n/2)] + sqrt(n) = 2^2T(n/4) + 2sqrt(n/2) + sqrt(n)
T(n) = 2^2[2T(n/8) + sqrt(n/4)] + 2sqrt(n/2) + sqrt(n)
= 2^3T(n/8) + 2^2sqrt(n/4) + 2sqrt(n/2) + sqrt(n)
一般
T(n) = 2^kT(1) + 2^(k-1) x sqrt(2^1) + 2^(k-2) x sqrt(2^2) + ... + 2^1 x sqrt(2^(k-1)) + sqrt(2^k)
到目前为止这是对的吗?如果是的话,我无法弄清楚如何简化它并将其简化为通用公式。
我猜这样的事情?结合术语
= 1 + 2^(k-(1/2)) + 2^(k-(2/2)) + 2^(k-(3/2)) + ... + 2^((k-1)/2) + 2^(k/2)
这就是我被困住的地方。也许是一种分解2 ^ k的方法? 任何帮助都会很棒,谢谢!
答案 0 :(得分:3)
你在那里一半。 表达式可以简化为:
答案 1 :(得分:2)
如果您只想要一个大O解决方案,那么Master Theorem就可以了。
如果你想要一个精确的等式,recursion tree是好的。像这样:
右手边是每个级别的成本,很容易找到成本的一般形式,即sqrt((2^h) * n)
。然后,总结一下你可以得到的成本T(n)。
O(n)
。sqrt(n)*(sqrt(2n)-1)*(sqrt(2)+1)
,这与大O符号相对应。编辑:
递归树只是所谓的backward substitution
的可视化形式。如果您总结右侧,即cost
,则可以得到T(n)
的广义形式。所有这些方法都可以在introduction to algorithm