您的位置:首页 > 其它

动态规划小结

2014-03-18 21:55 211 查看
Dynamical Programming(动态规划)

这是一种对递归方法的优化,应用地最多的场合是组合优化问题(Combinatorial Optimization)。

在用一般递归方法解决某些问题的时候,会出现对同一个子问题的重复计算,例如:

f(n) = f(n-1) + f(n-2)

f(10) = f(9) + f(8) = (f(8) + f(7)) + f(8) = ...

例如上面的f(8)就被计算了很多次。 所以,动态规划实现了,在解决子问题的过程中,保存这些子问题的答案,供后面直接使用,避免重复计算。

动态规划的例子包括:

1、最长公共子序列问题(L[i,j])

2、矩阵链相乘的最小代价问题(C[i, j])

3、图的最短路径问题(Floyd算法)

4、背包问题 (V[i, j])

以上例子基本都是通过二维矩阵来保存每次递归计算的中间结果的。

而且这个中间结果也是子问题的最优解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: