考虑这个例子:
T(n) = T(7n/8) + 2n
我假设T(1)= 0
并试图通过以下方式解决它
T(n) = T(7n/8) + 2n
= T(49n/64) + 2.(7n/8) + 2n
= T(343n/512) + 2.(7n/8).(7n/8)+ 2.(7n/8) + 2n
= T(1) + 2n ( (7n/8)^i + ..... + 1)
但我无法得出任何结论。我对下一步该怎么办感到困惑。
答案 0 :(得分:6)
你的方法很合理,但是你会看到如果你稍微改写它会怎么做:
T(n) = T((7/8)^1 * n) + 2 * (7/8)^0 * n
= T((7/8)^2 * n) + 2 * (7/8)^1 * n + 2 * (7/8)^0 * n
= T((7/8)^3 * n) + 2 * (7/8)^2 * n + 2 * (7/8)^1 * n + 2 * (7/8)^0 * n
.
.
.
= T((7/8)^k * n) + 2 * n * sum j = 0 to k-1 (7/8)^j
现在,让k
倾向于无限,看看会发生什么。如果您熟悉geometric series,那将会有所帮助。
答案 1 :(得分:0)
T(n)= T(7n / 8)+ 2n = 2n *(1 + 7/8 +(7/8)^ 2 + ...(7/8)^ Z)+ T(1)其中Z =?
唯一的技巧是找到Z.我打赌日志会有所帮助。对不起,现在已经很晚了,我不是在想,但是......你不需要添加多个2n。
编辑:Z是你需要将n乘以7/8直到得到1的时间。
所以,n * 7 ^ Z / 8 ^ Z = 1
(7/8)^ Z = 1 / n
(8/7)^ Z = n
你想要解决Z。
答案 2 :(得分:0)
你在最后一行中得到的是geometric series,并且有一个formula来简化这样的总和。