动态规划

转自:

动态规划的基本思想

动态规划的基本思想在于发现和定义问题中的子问题,这里子问题可也以叫做状态;以及一个子问题到下一个子问题之间 是如何转化的 也就是状态转移方程

因此我们遇到一个问题的时候 应该想一想这个问题是否能用某种方式表示成一个小问题,并且小问题具有最优子结构

最优子结构:问题的最优解由相关子问题的最优解组合而成,这些子问题可以独立求解

关于最优子结构 我们来看2个示例

1、求无权有向图中q-t的最短路径

如果q-t间的最短路径经过了点w  那么我们可以证明 q-w  w-t也均是最短路径  

所以无权有向图最短路径是具有最优子结构的

2、求无权有向图中q-t的最长的路径

NewImage

而无权有向图最长路径中 

q-t的最长路径是是q-r-t 但 q-r缺不是q-r的最长路径  q-s-t-r是一条更长的路径

所以无权有向图最长路径不具有最优子结构

 

动态规划与贪心等其他算法的比较

动态规划与分治,减治

分治       :将大问题分成若干个小问题去解决 递归的求解每个小问题,每个小问题之间没有关系  例如 快排

减治       :将大问题缩减成小问题,减掉的部分不需要考虑,例如:二分查找

动态规划:将原问题分成多个子问题,不同子问题间存在一定的联系,相互间有重叠的子问题

这里我个人认为动态规划分治 减治都是将大问题拆分成小问题 进行求解 区别在于

减治法减掉的部分 可以不用再求解了;

分治法每个小问题都需要进行求解;

动态规划不同的子问题间是有相互重叠的子问题的

 

动态规划与贪心

动态规划在于我们求解了所有子问题  虽然有些子问题最终并不能组成答案

而贪心算法任务无需求解所有子问题,所以选择在当前情况下最优的情况自顶向下的求解问题,贪心可以认为是动态规划的一个特例

如果用一个树来表示子问题的话 可以认为动态规划考虑了树中的所有节点

而贪心算法减去了树了许多枝干,在考虑了通向最优解的那一条路

posted @ 2018-09-19 23:15  静静的yu  阅读(161)  评论(0编辑  收藏  举报