动态规划小结

来源:互联网 发布:php格式怎么转换 编辑:程序博客网 时间:2024/04/28 22:49

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])


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

而且这个中间结果也是子问题的最优解。





0 0
原创粉丝点击