动态规划简介
动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。事实上,分治算法与动态规划有部分相同之处也有不同之处。分治算法是将问题划分成一些独立的子问题,递归的求解各个子问题,然后合并得到原问题的解,它是采用自顶向下的方法以整体到局部的思想来解决问题的。而动态规划则适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。采用分治算法则会重复许多的不必要的工作。而动态规划是自底向上来寻找最优解的,它每次只对子子问题求解一次,从而避免了分治算法所出现的情况。
动态规划常应用于最优化问题。通常包含四个步骤:
1 描述最优解的结构
2 递归定义最优解的值
3 按自底向上的方式计算最优解的值
4 由计算出的结果构造一个最优解
动态规划的应用
1 装配线调度
2
矩阵链乘法
3 动态规划基础
4 最长公共子序列
5 最优二叉查找树