动态规划算法
2016-04-27 23:31
211 查看
动态规划过程:每一次决策依赖于当前的状态,即下一状态的产生取决于当前状态。一个决策序列就是在变化的状态中产生的,这种多阶段最优化问题的求解过程就是动态规则过程。
动态规划求解的问题多数有重叠子问题的特点,为了减少重复计算,对每个子问题只求解一次,将不同子问题(阶段)的解保存在数组中。
与分而治之的区别:分而治之得到的若干子问题(阶段)一般彼此独立,各个子问题(阶段)之间没有顺序要求。而动态规划中各子问题(阶段)求解有顺序要求,具有重叠子问题(阶段),后一子问题(阶段)求解取决于前一子问题(阶段)的解。
与递归区别:与递归求解区别不大,都是划分成各个子问题(阶段),后一子问题(阶段)取决于前一子问题(阶段),但递归需要反复求解同一个子问题(阶段),相较于动态规划做了很多重复性工作。
最优化原理:求解问题包含最优子结构,即,可由前一子问题(阶段)最优推导得出后一子问题(阶段)最优解,递进得到初始问题的最优解。
无后效性:某状态以后的过程不会影响以前的状态,只与当前状态有关。
有重叠子问题:子问题(阶段)之间不是独立的,一个子问题(阶段)的解在下一子问题(阶段)中被用到。(不是必需的条件,但是动态规划优于其他方法的基础)
基本思想原理
与分而治之原理类似,将待求解的问题划分成若干个子问题(阶段)求解,顺序求解各个子问题(阶段),前一子问题(阶段)为后一子问题(阶段)的求解提供有用的信息。通过各个子问题(阶段)的求解,依次递进,最终得到初始问题的解。一般情况下,能够通过动态规划求解的问题也可通过递归求解。动态规划求解的问题多数有重叠子问题的特点,为了减少重复计算,对每个子问题只求解一次,将不同子问题(阶段)的解保存在数组中。
与分而治之的区别:分而治之得到的若干子问题(阶段)一般彼此独立,各个子问题(阶段)之间没有顺序要求。而动态规划中各子问题(阶段)求解有顺序要求,具有重叠子问题(阶段),后一子问题(阶段)求解取决于前一子问题(阶段)的解。
与递归区别:与递归求解区别不大,都是划分成各个子问题(阶段),后一子问题(阶段)取决于前一子问题(阶段),但递归需要反复求解同一个子问题(阶段),相较于动态规划做了很多重复性工作。
适用解决问题
采用动态规划求解的问题一般具有如下性质:最优化原理:求解问题包含最优子结构,即,可由前一子问题(阶段)最优推导得出后一子问题(阶段)最优解,递进得到初始问题的最优解。
无后效性:某状态以后的过程不会影响以前的状态,只与当前状态有关。
有重叠子问题:子问题(阶段)之间不是独立的,一个子问题(阶段)的解在下一子问题(阶段)中被用到。(不是必需的条件,但是动态规划优于其他方法的基础)
求解步骤
相关文章推荐
- Android项目的目录结构
- Nginx 配置示例
- DataMining(2)_Mining Frequent Patterns
- 个人链接&阅读书单
- 去掉li列表前面的空格
- [BZOJ1060][ZJOI2007]时态同步(树形dp)
- SoapUI-入门
- 几个简单的排序算法
- 集合框架(Collection集合的基本功能测试)
- 蛤玮的财宝
- CF初体验---Round #348,B
- Codeforces 665C - Simple Strings
- 基于AWS搭建分布式计算环境
- bootstrap精简教程
- 四.流程控制-学习笔记
- Java语言中没有引用传递,只有值传递。到底对不对?
- RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接
- R语言︱缺失值处理之多重插补——mice包
- JDBC连接数据库教程,以postgreSQL为例
- Java程序员容易犯的常见十大错误