动态规划入门<三>
2016-10-21 20:03
232 查看
第三节 动态规划的思考角度
那么什么是动态规划呢?我个人觉得,如果一个解决问题的方法满足上面六个思考点中的前四个,那么这个方法就属于动态规划。而在思考动态规划方法时,后两点同样也是需要考虑的。面对问题要寻找动态规划的方法,首先要清楚一点,动态规划不是算法,它是一种方法,它是在一件事情发生的过程中寻找最优值的方法,因此,我们需要对这件事情所发生的过程进行考虑。而通常我们从过程的最后一步开始考虑,而不是先考虑过程的开始。
打个比方,上面的挖金矿问题,我们可以认为整个开采过程是从西至东进行开采的(也就是从第0座开始),那么总有面对最后一座金矿的时候(第9座),对这座金矿不外乎两个选择,开采与不开采,在最后一步确定时再去确定倒数第二步,直到考虑第0座金矿(过程的开始)。
而过程的开始,也就是考虑的最后一步,就是边界。
因此在遇到一个问题想用动态规划的方法去解决时,不妨先思考一下这个过程是怎样的,然后考虑过程的最后一步是如何选择的,通常我们需要自己去构造一个过程,比如后面的练习。
第四节 总结
那么遇到问题如何用动态规划去解决呢?根据上面的分析我们可以按照下面的步骤去考虑:1、构造问题所对应的过程。
2、思考过程的最后一个步骤,看看有哪些选择情况。
3、找到最后一步的子问题,确保符合“子问题重叠”,把子问题中不相同的地方设置为参数。
4、使得子问题符合“最优子结构”。
5、找到边界,考虑边界的各种处理方式。
6、确保满足“子问题独立”,一般而言,如果我们是在多个子问题中选择一个作为实施方案,而不会同时实施多个方案,那么子问题就是独立的。
7、考虑如何做备忘录。
8、分析所需时间是否满足要求。
9、写出转移方程式。
相关文章推荐
- <每日一题>动态规划入门:求最小硬币个数
- STM32系统中应用的动态加载可行性研究过程<三>
- Mybatis最入门---动态查询( <trim prefix="where" prefixOverrides="and|or"> )
- Linux 入门常用命令<三>
- PCL入门<三>平面的法线
- Python入门<三>
- CMake入门学习+实战<三> 静态库与动态库构建
- 数据结构实例<三>(匹配链表所有元素删除后并返回新的链表)入门
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- SQL入门笔记<三>
- poj 1973 分配任务 进阶动态规划 <难题>
- 动态规划之 <筷子>
- <蓝桥杯>动态规划解最长公共子序列
- c++入门 (头文件)<三>
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- dubbo学习之Consumer入门<三>
- arcgis api for flex 开发入门(六)identify<转>
- PDF文件操作API之PDFBox<一> PDFBox入门
- arcgis api for flex 开发入门(七)Geometry service 的使用<转>