- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[noip动态规划1
动态程序设计 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 动态规划 与递归程序相类,将对问题求解分解为对子问题求解;不同之处在于把子问题的解存起来,用空间换时间。 例:Fibonacci数 F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2); 递归: F(n-1)和F(n-2)分别求到底一次 动态规划:用数组将前n-1个数存起来,每次只用一个加法 F[n] = F[n-1]+F[n-2] 即可。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 例1 最短路径问题。下图中给出一个地图,地图中每个顶点代表一个城市,两个城市之间的连线表示道路,连线上的数值代表道路的长度。现在,想从城市A到城市E,怎样走路程最短,最短路程的长度是多少? 现在,我们想从城市A到达城市E。怎样走才能使得路径最短,最短路径的长度是多少? 设:Dis[x]为城市x到城市E的最短路径长度(x表示任意一个城市);Map[i,j]表示i,j两个城市间的距离,若map[i,j]=0,则两个城市不通。 我们可以使用回溯来计算Dis[x]: Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. var s:未访问的城市聚合; function search(who):integer; {求城市Who与城市E的最短距离} Var i,j,min:integer; begin if who=E then search:=0 else begin min:=maxint; for i取遍所有城市 do if (map[who,i]0) and (i in s) then begin s:=s-[i]; {城市i已访问} j:=map[who,i]+search(i); {计算城市E至城市Who的路径长度} s:=s+[i]; {恢复城市i未访问状态} if jmin then min:=j; {若城市E至城市Who的路径长度为目前最短,则记下} end; search:=min; {返回城市E至城市的最短路径长度} end; begin s:=所有城市; dis[a]:=search(a); {计算城市A城市E的最短路径长度} writeln(dist[a]); end. Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 这个程序的效率如何呢?我们可以看到,每次除了已经访问过的城市外,其他城市都要,所以时间复杂度为W(n!),这是一个“指数级”的算法。那么还有没有效率更高的解题方法呢? 首先,我们来观察上述算法。在求B1到E的最短路径的时候,先求出从C2到E的最短路径;而在求B2到E的最短路径的时候,又求了一遍从C2到E的最短路径。也就是说,从C2到E的最短路径求了两遍。两样可以发现,在求从C1、C2到E的最短路径的过程中,从D1到E的最短路径也被求了两遍。而在整个过程中,从D1到E的最短路径被求了四遍,这是多么大的一个浪费啊!如果在求解的过程中,同时将求得的最短路径的距离“记录在案”,以便将来随时调用,则可以避免这种重复计算。至此,一个新的思路产生了,即由后往前依次推出每个Dis值,直到推出Dis[A]为止。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 阶段的划分具有如下性质: ⑴阶段i的取值只与阶段i+1有关,阶段i+1的取值只对阶段i的取值产生
文档评论(0)