码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划

时间:2018-09-20 01:18:41      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:关于   动态规划   最短路径   最长路   比较   多个   有关   不同   情况下   

转自:

动态规划的基本思想

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

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

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

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

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

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

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

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

技术分享图片

而无权有向图最长路径中 

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

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

 

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

动态规划与分治,减治

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

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

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

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

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

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

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

 

动态规划与贪心

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

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

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

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

动态规划

标签:关于   动态规划   最短路径   最长路   比较   多个   有关   不同   情况下   

原文地址:https://www.cnblogs.com/jing-yu/p/9678291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!