重叠子问题动态规划算法.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
重叠子问题动态规划算法

作业: 15.2-1 15.2-3 15.6 适用条件 适合采用动态规划方法的最优化问题中的两要素: 最优子结构 重叠子问题 一、 最优子结构 如果问题的最优解是由其子问题的最优解来构造的,则称该问题具有最优子结构。 在动态规划中,我们利用子问题的最优解来构造问题的一个最优解,因此,必须确保在我们所考虑的子问题范围中,包含了用于一个最优解的那些子问题。 15.6.1 最优子结构 寻找最优子结构的模式: 问题的一个解可以是做一个选择(例如:选择一个下标以在该位置分裂矩阵链) 假设对一个给定的问题,已知一个可以导致最优解的选择(不必关心如何确定这个选择,只需假定它是已知的) 在已知该选择后,要确定哪些子问题会随之发生,以及如何最好地描述所得到的子问题空间 利用“剪贴”(cut-and-paste)技术,来证明在问题的一个最优解中,使用的子问题的解本身也必须是最优的。 方法:假设每一个字问题的解都不是最优解,导出矛盾即可 特别的,通过“剪除”非最优的子问题再“贴上”最优解,即得到原问题的一个更好的解,从而与假设已得到一个最优解矛盾。 15.6.1 最优子结构 利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。最优子结构是问题能用动态规划算法求解的前提。 寻找问题的一个最优解需要在子问题中做出选择,即选择将用哪一个来求解问题 问题解的代价=子问题的代价+选择带来的开销 同一个问题可以有多种方式刻划它的最优子结构,有些表示方法的求解速度更快(空间占用小,问题的维度低) 注:贪心算法适用的问题也具有最优子结构,但它是以自顶向下的方式使用最优子结构;先做选择再求解一个结果子问题。 15.6.1 最优子结构 注意:在不能应用最优子结构的时候,一定不能假设它能够应用 如何判断问题满足最优性原理? 思路:利用反证法,通过假设每一个子问题的解都不是最优解,然后导出矛盾,即可做到这一点。 例1:设G是一个有向加权图,则G从顶点i到顶点j之间的最短路径问题满足最优性原理。 证明:(反证法) 设i ~ ip ~ iq ~ j是一条最短路径,但其中子路径ip ~ iq ~ j不是最优的。 假设最优的子路径为 ip ~ iq’~ j,则我们可以重新构造一条路径:i ~ ip ~ iq’ ~ j,显然该路径长度小于 i ~ ip ~ iq ~ j,与i ~ ip ~ iq ~ j是顶点i到顶点j的最短路径相矛盾。 所以原问题满足最优性原理。 15.6.2 重叠子问题 动态规划算法,充分利用重叠子问题,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。 通常不同的子问题个数随问题的大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。 15.6.3 做备忘录 动态规划的一种变形,既具有通常的动态规划方法的效率,又采用了一种自顶向下的策略 思想:备忘(memoize)原问题的自然但低效的递归算法,维护一个记录了子问题解的表,但有关填表动作的控制结构更像递归算法。 方法:加了备忘的递归算法为每一个子问题的解在表中记录一个表项。 每个表项最初包含一个特殊的值,表示该表项有待填入; 在递归算法的执行中第一次遇到一个子问题时,计算它的解并填入表中; 以后再遇到该子问题,只要查看并返回表中先前填入的值即可。 自顶向下的做备忘录算法和自底向上的动态规划算法都利用了重叠子问题性质 如果所有子问题都至少要被计算一次,则后者比前者好出一个常数因子,因为后者无需递归的代价,维护表格的开销也小些。 有些问题可以用动态规划算法的表存取模式来进一步减少时间或空间上的需求。 如果某些子问题没有必要求解,做备忘录方法有着只解那些肯定要求解的子问题的优点。 作业 15.3-3 15.4-3 15.4-5 15.11 0-1背包问题 最优值的递归式如下: * * 临界条件: 算法复杂度分析: 从m(i, j)的递归式容易看出,算法需要 O(nc) 计算时间。当背包容量c 很大时,算法需要的计算时间较多。例如,当c2n时,算法需要Ω(n2n)计算时间。 15.11 0-1背包问题 代码: * * 15.11 0-1背包问题 构造最优解: * * 15.12 备忘录动态规划算法 通常,动态规划算法都是由底向上求解,逐一求解子问题,最终得到原问题的解。无论所求解的子问题在后面是否利用到,动态规划法都要记录所有子问题的解。这种方法不够直观。 备忘录动态规划法,不仅具有通常动态规划方法的效率,同时还采取了一种自顶向下的策略。其思想是备忘原问题的自然但是低效的递归算法。像在

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档