算法设计与分析入门之动态规划
动态规划原理
动态规划和分治法的区别
分治法中划分的各个子问题是独立的,如果子问题不是独立的,那么分治法将会重复计算公共子问题导致效率很低.
优化问题
对于给定一组约束条件和一个代价函数,在解空间中搜索具有最小或者最大代价的优化解
许多优化问题可以分为多个子问题,子问题相互关联,子问题的解被重复使用
动态规划
原始问题分解成为一系列的子问题,每个子问题求解一次,将求解结果保存在一个表当中,以后可以直接访问这个表来获取子问题的解,不需要重复计算.
每次求解的时候都是自底向上计算.
这就要求子问题的解应当被重复使用
使用动态规划的条件
- 优化子结构
- 重叠子问题
动态规划算法的设计步骤
- 分析优化解的结构
- 递归定义最优解的代价
- 自底向上计算优化解的代价并保存,并获取最优解的信息
- 根据最优解的信息构造优化解