动态规划

转自:算法

动态规划的基本思想blog

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

所以咱们遇到一个问题的时候 应该想想这个问题是否能用某种方式表示成一个小问题,而且小问题具备最优子结构it

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

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

一、求无权有向图中q-t的最短路径动态规划

若是q-t间的最短路径通过了点w  那么咱们能够证实 q-w  w-t也均是最短路径  co

因此无权有向图最短路径是具备最优子结构的ps

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

NewImage

而无权有向图最长路径中 

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

因此无权有向图最长路径不具备最优子结构

 

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

动态规划与分治,减治

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

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

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

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

减治法减掉的部分 能够不用再求解了;

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

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

 

动态规划与贪心

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

而贪心算法任务无需求解全部子问题,因此选择在当前状况下最优的状况自顶向下的求解问题,贪心能够认为是动态规划的一个特例

若是用一个树来表示子问题的话 能够认为动态规划考虑了树中的全部节点

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

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息