动态规划的优化技巧.pptVIP

  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文档。上传文档
查看更多
动态规划的优化技巧

动态规划的优化技巧 沈许川冗余 求解无用的子问题 对结果无意义的引用 时间复杂度 状态总数 每个状态转移的状态数 每次状态转移的时间 相互联系 相互制约 一、状态总数 状态的选择 阶段划分 合理性 完备性 操作性 题目信息约束 显式 隐式 Raucous Rockers 演唱组(USACO`96) [问题描述] 现有n首由Raucous Rockers 演唱组录制的珍贵的歌曲,计划从中选择一些歌曲来发行m张唱片,每张唱片至多包含t分钟的音乐,唱片中的歌曲不能重叠。按下面的标准进行选择: (1).这组唱片中的歌曲必须按照它们创作的顺序排序; (2).包含歌曲的总数尽可能多。 输入n,m,t,和n首歌曲的长度,它们按照创作顺序排序,没有一首歌超出一张唱片的长度,而且不可能将所有歌曲的放在唱片中。输出所能包含的最多的歌曲数目。 (1≤n, m, t≤20) 方法一 long[1..n] n首歌曲按照写作顺序排序后的长度 g[i, j, k] 前 i 首歌曲用 j 张唱片另加 k 分钟 最多可以录制的歌曲数目 g[n, m, 0] 问题的最优解 转移方程 k≥long[i],i≥1 g[i, j, k]=max{g[i-1,j,k-long[i]],g[i-1,j,k]} k long[i],i≥1 g[i, j, k]=max{g[i-1,j-1,t-long[i]],g[i-1,j,k]} 边界条件 0≤k t g[0,0,k]=0 时间复杂度 状态总数为O(n*m*t) 每个状态转移的状态数为O(1) 每次状态转移的时间为O(1) 所以总的时间复杂度为O(n*m*t) 由于n,m,t均不超过20,所以问题解决 数据规模变大?(1≤n, m, t≤1000) 方法二 g[i, j]=(a, b) 在前i首歌曲中选取j首录制所需的最少唱片为:a张唱片另加b分钟 g[i, j]=min{g[i-1,j],g[i-1,j-1]+long[i]} 其中(a, b)+long[i]=(a’, b’)的计算方法为: 当long[i]≤t-b时: a’=a; b’=b+long[i]; 当long[i]t-b时: a’=a+1; b’=long[i]; 规划的边界条件: g[i,0]=(0,0) 0≤i≤n 题目所求的值:ans=max{k| g[n, k]≤(m-1,t)} 状态总数为O(n2) 每个状态转移的状态数为O(1) 每次状态转移的时间为O(1) 所以总的时间复杂度为O(n2) 值得注意的是,空间复杂度 O(n*m*t) ? O(n2) 使用滚动数组 O(n*m*t) ? O(n) 二、每个状态转移的状态数 状态表示决定范围 决策量的优化 挖掘题目信息 决策单调性 四边形法则 abcd w[a,c]+w[b,d]w[a,d]+w[b,c] 合理组织状态 石子合并问题(NOI`95) [问题描述] 在一个操场上摆放着一排n(n≤20)堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试编程求出将n堆石子合并成一堆的最小得分和最大得分以及相应的合并方案。 方法一 w[i] 第i堆石子的石子数 C[i,j] 将第i堆石子、第j堆石子及之间的石子合并所得最小分数 方法二 状态转移方程优化为: C[i,j]=max{C[i+1,j], C[i,j-1]}+t[i,j] ij 规划的边界条件是: C[i,i]=0 算法的时间复杂度O(n2)。 S[i,j-1]? S[i,j] ? S[i+1,j] 由S[i,j-1]? S[i,j] ? S[i+1,j],可知 式中,如果我们先计算了C[i-1,j],S[i-1,j]与C[i,j+1],S[i,j+1] 再计算C[i,j]时,k仅需考虑 S[i-1,j] ? S[i,j+1]中的取值。 因此,k的选择,由最初的i?j-1,变为了S[i-1,j] ? S[i,j+1] 当我们按照 j – i 的值划分阶段时, 第d阶段,即计算S[1,1+d],S[2,2+d]…S[i,i+d]…S[n-d,n] 需时O(S[n-d+1,n]-S[1,d]+n-d)? O(n) n个阶段总耗时O(n2) 从减少能够转移到当前状态的状态数入手 大多利用题目的单调性或其他更强的特性 四边形法则+单调性 效果很好 应用广泛 要求数学能力强(⊙﹏⊙b汗) 三、每次状态转移的时间 减少决策时间 恰当的顺序 恰当的数据结构 hash表 O(1) 队列优化 O(n) n次扫描均摊为O(1) 排序+二分

文档评论(0)

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

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

1亿VIP精品文档

相关文档