使用迭代方法求解递归关系

时间:2010-01-13 00:10:18

标签: algorithm recurrence

考虑这个例子:

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)               

但我无法得出任何结论。我对下一步该怎么办感到困惑。

3 个答案:

答案 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来简化这样的总和。