17 动态规划-参考资料.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法导论 世上本没有ACM ,AC 的人多了,也便有了! 17 动态规划 Dynamic Programming • 和分治法一样,动态规划是通过组合子问题的解 而解决整个问题的。 • 分治法:指将问题划分成一些独立的子问题,递 归地求解各子问题,然后合并子问题的解而得到 原问题的解。 自从有了动态规划,这个世界变得好美妙! • DP适用于子问题不是独立的情况,即各子问题 包含公共子子问题。此时,若采用分治法,会重 复地求解公共的子子问题。而DP对每个子子问 题只求解一次,将其结果保存在一张表中,从而 避免每次遇到各子问题时都要重新计算。 • DP主要用于最优化问题的求解。最优化问题一 般有很多的可行解,每个解都有一个值,目的是 找出具有最优(最大/最小)值的解。当有多个 最优解时,一般是求出一个即可。 DP的基本步骤 • ①描述最优解的结构特征; • ②递归地定义最优解的值; • ③按自底向上的方式计算最优解的值; • ④由计算出的结果构造出一个最优解。 • 1-3步是用DP求解的基础。第4步,如果只要求 计算出最优解的值,可以略去。若要构造最优解 ,则要在第3步中记录一些附加的信息,例如求 最短路径。 DP基础 • 采用DP方法解决最优化问题的两个要素:最优 子结构和重叠子问题。 • (1)最优子结构 • 用DP求解优化问题的第一步是描述最优解的结 构。 • 如果一个问题的一个最优解中包含了子问题的最 优解,则该问题具有最优子结构性质。 • 当一个问题具有最优子结构时,提示我们DP可 能会适用。 • 在分析问题的最优子结构性质时,所用的方法具 有普遍性:首先假设由原问题的最优解导出的子 问题的解不是最优的,然后再设法说明在此假设 下,可构造出比原问题最优解更好的解,从而导 出矛盾。 满足最优性原理的例子:最短路径 • 若路线I和J是A到C的最优路径,则根据最优化 原理,路线J必是从B到C的最优路线。这可用 反证法证明:假设有另一路径J‗是B到C的最优 路径,则A到C的路线取I和J‘ 比I和J更优,矛盾 。从而证明J必是B到C的最优路径。 • 利用问题的最优子结构性质,以自底向上 的方式递归地从子问题的最优解逐步构造 出整个问题的最优解。 • 最优子结构性质是问题能用DP求解的前 提。DP最重要的就是找到最优子结构。 • (2 )重叠子问题 • 递归算法求解问题时,每次产生的子问题并不总 是新问题,有些子问题被反复计算多次。这种性 质称为子问题的重叠性质。 • DP,对每个子问题只求解一次,然后将其解保 存在一个表格中,当再次要解此子问题时,只要 查询一下表即可。 •通常不同的子问题个数随问题的大小呈多项式增 长。因此用动态规划只需要多项式时间,从而获 得较高的解题效率。 备忘录方法 • 备忘录方法是DP的一个变种。 • 备忘录方法的控制结构与直接递归方法的控制结 构相同,区别在于备忘录方法为每个解过的子问 题建立了备忘录以备需要时查看,避免了相同子 问题的重复求解。 • 备忘录方法本质上与DP一样,但是比DP更好理 解: • (1)使用普通的递归结构,自上而下的解决问 题。 • (2 )当在递归算法的执行中每一次遇到一个子 问题时,就计算出它的解并存入一个表中。以后 每次遇到该子问题时,只要查看并返回表中先前 填入的值即可。 • 如果所有的子问题都至少要被计算一次,则一个 自底向上的DP算法比一个自顶向下的做备忘录 算法好出一个常数因子,因为DP无需递归的代 价,而且维护表格的开销也小些;如果子问题空 间中的某些子问题根本没有必要求解,做备忘录 方法有着只解那些肯定要求解的子问题的优点。 例1:Fibonacci数列 • Fibonacci数列: • 1,1,…,f(n-1)+f(n-2),… • 采用树形递归方法: int f(int n){ if(n==0 || n==1) return

文档评论(0)

hhx0627 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档