《DP动态规划ACM课件.pptVIP

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划1 罗方炜 简介 DP是在20世纪50年代由一位卓越的美国数学家Richcard Bellman发明的。它作为一种重要的工具在应用数学中被广泛的应用。它不仅可以解决特定类型的优化问题,还可以作为一种通用的算法设计技术来使用。 DP的实质 利用问题的所具有的重叠子问题的性质进行记忆化求解。(用空间换时间) 求Fibonacci数: f(n) = f(n-1) + f(n-2) n2 f(1)=f(2)=1 常规递归 int Non_DP(int n) { ? if (n==1 || n==2) ??? return 1; ? else ??? return Non_DP(n-1) + Non_DP(n-2); } 指数级时间复杂度,无法忍受 两种实现方式 自底向上(bottom up) int DP_Bottom_Up(int n) { ? memo[1] = memo[2] = 1; for (int i=3; i=n; i++) memo[i] = memo[i-1] + memo[i-2]; return memo[n]; } 自顶向下(top down) int DP_Top_Down(int n) { if (n == 1 || n == 2) return 1; if (memo[n] != 0) return memo[n]; memo[n] = DP_Top_Down(n-1) + DP_Top_Down(n-2); return memo[n]; } 基本概念 最短路问题 直观的方法是用回溯法搜索。时间复杂度为指数级。 低效的原因:没有充分利用重叠子问题的性质。 此图有明显的次序,可以划分为5阶段。 设 Dis[k][x] 为第k阶段城市x到城市E的最短路径长度。 map[ i ][ j ]为i,j两个城市间的距离。 递归方程为 Dis[k][x] = min { Dis[k+1][y]+map[x,y] } 此问题时间复杂度降为O(n2). 状态:贴切,简洁的描述出事物性质的单元量。例如:Dis[x]。 要求:状态与状态之间可以转移,以便有初始状态逐渐转移到目标状态,找到问题的解。 阶段:若干性质相近可以同时处理的状态的集合。就是计算状态的顺序。 要求:每个阶段中状态的取值只与这个阶段之前的阶段中的状态有关,与这个阶段之后的阶段中的状态无关。 状态转移方程:前一个阶段中的状态转移到后一个阶段的状态得演变规律,即相邻两个阶段的状态变化方程。 fk(i) = opt { fk-1(j) + cost(i,j) } k阶段的i状态与k-1阶段的j状态有关 决策:计算每个状态时作出的选择。 适合用DP解决的问题的性质 最优子结构:若求解的问题是最优化问题,则原问题最优当且仅当自问题最优。 Mod 4 最优路径问题 找出1到4的一条长度mod 4的余数最小的路径。 此最优化问题不满足最优子结构,所以不适合用DP。 但如果我们增加状态的维数,将最优化问题转化成判定性问题,再运用DP,问题就可得以解决。 设 f[k][i] 为bool型数组,表示从1点到k点长度mod4为i的路径是否存在。 f[k][i]= f[k-1][i-len[k][1]] || f[k-1][i-len[k][2]] || …|| f[k-1][i-len[k][n]] 无后效性:决策之取决于当前状态的特征因素,而和到达此状态的方式无关。也就是每个阶段中状态的取值只与这个阶段之前的阶段中的状态有关,与这个阶段之后的阶段中的状态无关。 如果当前定义的状态不满足无后效性,应重新定义。 一维状态存储问题 硬币问题1: 有n种硬币,每种硬币的面值为vi元,且只有一枚,问用这n种硬币找零S元的方法数。 设d[i][j]为前i种硬币组成j元的方法数。 d[i][j] = d[i-1][j] + d[i-1][j-vi] d[0][0]=1,d[0][1…S]=0 空间复杂度为O(n2),浪费! d[0]=1; d[1…S]=0; for (i=1; i=n; i++) { for (j=S; j=vi; j--) { ????? d[j] += d[j-vi]; ? } } 0-1背包问题: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 设m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时,0-1背包问题的最优值。 m(i,j) =

文档评论(0)

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

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

1亿VIP精品文档

相关文档