动态规划计算的优化 ——利用四边形不等式,利用其他数据结构.pptVIP

动态规划计算的优化 ——利用四边形不等式,利用其他数据结构.ppt

  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文档。上传文档
查看更多
动态规划计算的优化 ——利用四边形不等式,利用其他数据结构

动态规划计算的优化 ——利用四边形不等式,利用其他数据结构 李子星 四边形不等式 定义 m[i,j]=min{ m[i,k]+m[k+1,j]+w[i,j] | i=kj } s[i,j]=max{ k | m[i,j]=m[i,k]+m[k+1,j]+w[i,j] } 定理 若对于任意的i’=i=j=j’满足w[i,j]=w[i’,j’],则称函数w满足区间包含单调性。 若对于任意的i’=i=j=j’满足w[i’,j]+w[i,j’]=w[i,j]+w[i’,j’]则称函数w满足四边形不等式。 若w满足区间包含单调性且满足四边形不等式,则m也满足四边形不等式。 若m满足四边形不等式,则s[i,j]=s[i,j+1]=s[i+1,j+1] 证明很复杂,大家有兴趣可以网上搜,这里就略去了。 四边形不等式 于是 m[i,j]=min{m[i,k]+m[k+1,j]+w[i,j] | s[i,j-1]=k=s[i+1,j]} 而m的总计算量为sum{s[i+1,j]-s[i,j-1], 1=i=j=n},可以发现这个值是O(n2)的。 时间复杂度就从O(n3)降到O(n2)了。 石子合并问题 题意:n堆石子顺序排开,每次可以合并相邻的两堆,合并的代价是两堆石子的个数的和。问最小合并代价。 方法: 规划方程为 m[i,j]=min{m[i,k]+m[k+1,j]+w[i,j] | i=kj} 完全满足前面的条件,于是可以用前面的方法在O(n2)搞定。 石子合并问题 但如果要求最大代价,就不行了,因为规划方程不再是取min,而是取max了。 大家也不用去推导证明,写个程序,再弄一批随机数据就可以验证了。 四边形不等式优化适用范围似乎非常的窄而且推导非常的繁琐和麻烦,通用性也不强。 四边形不等式 其实可以直接一些: 四边形不等式优化的关键就是s函数满足一定的单调性,不一定利用四边形不等式证明,靠思考和猜想都可以得到这个结论。 邮局问题 题意:在数轴上有n个村庄,各个村庄的位置分别在p[1..n]上(且p已经按从小到大排过序了),要求从中选k个建邮局,问每个村庄走到离其最近的邮局的距离的和。 方法: 规划方程为: f[i,j]=min{f[x-1,j-1]+w[x,i] | j=x=i} w[k,i]的计算可以想办法在O(1)的时间复杂度内算出,于是计算f的时间复杂度为O(n2k)。 邮局问题 同样定义: s[i,j]=max{k | f[i,j]=f[k-1,j-1]+w[k,i]且j=k=i} 我们可以略过四边形不等式,直接讨论s[i,j]的单调性。 很容易就可以想象到s[i,j]=s[i,j-1],因为s[i,j]实际上对应的是最后一个邮局服务的最靠左的村庄编号,如果邮局总数变少了,那么最后一个邮局没道理服务更少的村庄。 已经得到了一个下限,下一步就是想办法得到一个上限。同样可以很容易想象到s[i,j]=s[i+1,j],因为s[i,j]s[i+1,j]的情况同样是不可能的。 邮局问题 邮局问题 于是就我们通过几个很容易想到的情形就得到了结论: s[i,j-1]=s[i,j]=s[i+1,j] 且 O(sum{s[i+1,j]-s[i,j+1],1=i=n,1=j=k}) = O(n*n) 于是,之前的计算时间复杂度就降为O(n*n)了。 利用数据结构优化计算 四边形不等式实质上就是减少状态转移的代价。 而要减少状态转移的代价也可以利用一些数据结构来达成目标。 邮局问题加强 题意:有编号为1..n的n个村庄,按编号顺序依次排在一条数轴上,要求从中选任意个建邮局。已知i号村庄在数轴上的x[i]位置(x[i]=x[i+1]),在此建立邮局的费用为p[i],在此建立邮局能够为距离不超过r[i]的所有村庄提供服务,若这个村庄没有邮局能够为其提供服务,则政府要为其补贴c[i],问最小的费用。 邮局问题加强 方法: 令L[i]=min{ k | x[i]-x[k]=r[i] },即i号村庄建立邮局向左最远能服务到的村庄编号。 令R[i]=max{ k | x[k]-x[i]=r[i] },即i号村庄建立邮局向右最远能服务到的村庄编号。 那么m[i,k]=min{ min{ m[L[j]-1,k-1]+p[j] | R[j]=i }, m[i-1,k]+c[i], m[i,k-1] } 计算的时间复杂度显然是O(n3)的。 邮局问题加强 定义 f[i,k]=m[L[i]-1,k-1]+p[i] g[i,k]={ j | R[j]=i } 那么 m[i,k]=min{ min{ f[j,k] | j∈g[i,k] }, m[i-1,k]+c[i], m[i,k-1] } g[i-1,k]?g[i,k] 因为若j?g[i-1,k]

文档评论(0)

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

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

1亿VIP精品文档

相关文档