最短路算法及差分系统.docxVIP

  1. 1、本文档共37页,可阅读全部内容。
  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文档。上传文档
查看更多
最短路算法及差分系统 Yuke Liao liao.yu.ke@ 2012/7/29 定义 在最短路问题中,给出的是一有向加权图G=(V,E), 在其上定义的加权函数W:E→R为从边到实型权值的映射。路径P=(v0, v1,……, vk)的权是指其组成边的所有权 值之和: ?? ?? ?? = ??(???? ?1,????) ??=0 ??定义u到v间最短路径的权为: ? ? ? ??? v) ? ?min?w( p):u?v?  如果存在由u到v的通路如果不存在 从结点u到结点v的最短路径定义为使权值最小 的任何路径。 负权边 对于存在负权边的图,定义需要做修正 2 -8 3 负权回路!! 若存在从起点可达的负权回路,则定义最短路为-∞ 松弛技术 反复减小估计出的最短路权值的上限 设置d[v]来描述从源s到v的最短路径的权的上界, 称之为最短路径估计 INITIALIZE-SINGLE-SOURCE(G,s) INITIALIZE-SINGLE-SOURCE(G,s) For 每个结点 v V[G] Do d[v] ← [v] ← NIL 4. d[s] 0 RELAX(u,v,w) If d[v] > d[u] + w(u,v) Then d[v] ← d[u] + w(u,v) 3. [v] ← u 常用算法 Dijkstra algorithm Bellman-Ford algorithm SPFA algorithm Dijkstra algorithm Dijkstra(G,w,s) INITIALIZE-SINGLE- SOURCE(G,S) S Q ← V[G] While Q Do u ← EXTRACT-MIN(Q) S ← S U {u} For 每个顶点v Adj[u] Do RELAX(u,v,w) Dijkstra Algorithm ? 算法的正确性(无负权边) ? 为什么对负权边失效 5 7 -5 适用条件:无负权边 堆优化的Dijkstra算法 Bellman-Ford Algorithm Bellman-Ford(G,w,s) 1. INITIALIZE-SINGLE-SOURCE(G,s) 2. For i ← 1 to |V[G]|-1 3. Do For 每条边(u,v) E[G] 4. Do RELAX(u,v,w) 5. For 每条边(u,v) E[G] 6. Do If d[v] > d[u] + w(u, v) 7. Then Return FALSE 8. Return TRUE Bellman-Ford Algorithm 5 MAX MAX -2 6 -3 5 MAX -2 6 -3 8 7 8 S 0 2 7 MAX 7 -4 MAX T 9 S 0 2 -4 7 MAX T 9 5 6 4 -2 6 -3 8 7 S 0 2 -4 7 7 2 T 9  5 2 4 -2 6 -3 8 7 S 0 2 -4 7 7 2 T 9 Bellman-Ford Algorithm ? 算法正确性(无负权值环) 两点间如果有最短路,那么每个结点最多经 过一次。也就是说,这条路不超过n-1条边 使用条件:可以有负权边。。。。 但算法效率较低 SPFA Algorithm Shortest Path Faster Algorithm 没有被更新的点不用做松弛操作 队列辅助 SPFA Algorithm SPFA(G,w,s) 1. INITIALIZE-SINGLE-SOURCE(G,s) 2. INITIALIZE-QUEUE(Q) 3. ENQUEUE(Q,s) 4. While Not EMPTY(Q) 5. Do u ← DLQUEUE(Q) 6. For 每条边(u,v) E[G] 7. Do tmp ← d[v] 8. Relax(u,v,w) 9. If (d[v] < tmp) and (v不在Q中) 10. ENQUEUE(Q,v) SPFA Algorithm ? 算法正确性 ? 期望时间复杂度为O(E) Proof: 各算法之间的比较 算法 时间复杂度 空间复杂度 编程复杂度 适用范围 Dijkstra O( V2 )或 O((E+V)logV) O( V2 )或 O(E+V) 简单或相对复杂 不含负权的图 (窄) Bellman-Ford O(VE) O(E+V) 简单 实数图(广) SPFA O(E) O(E+V) 简单 实数图(广) Example 1 若干个货币兑换点在城市中工作着,每个兑换点只能进行两种指定货币的兑换。不同兑换点兑换的货币有可能相同。每个兑换点有它自己的兑换汇率,货币A 到货币B的汇率表示要多少单位的货币B才

文档评论(0)

159****1262 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档