Lecture6-最短路径算法.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文档。上传文档
查看更多
Lecture6-最短路径算法

最短路径算法 高文宇 gwyy@163.com 最短路径问题 给定的带权图中,从节点u到v的最短路径即所有路径中边的权值之和最小的路径。有如下几种变形。 (1)单源最短路径。 (2)单终点最短路径。 (3)单对顶点最短路径。 (4)每对顶点间的最短路径。 最短路径的结构 最短路径问题的最优子结构: Lemma 24.1: (Subpaths of shortest paths are shortest paths) 给定一个带权有向图 G = (V, E)和权值函数 w : E → R。设 p = 〈v1, v2,..., vk〉从v1 到 vk 的最短路径,对于任意 i 和 j ,其中 1 ≤ i ≤ j ≤ k,设 pij = vi, vi+1,..., vj 是路径 p 从 vi 到 vj 的子路径,则 pij 是一条从 vi 到 vj 的最短路径。 负权值边 Negative-weight edges 若图 G = (V, E) 不包含从源点 s可达的负权回路,则对所有 v ∈ V ,则最短路径的权的定义δ(s, v) 依然真确,即使允许有负权值边的存在。若包含有负权回路,则不存在“最短路径”。 某些算法如Dijkstra算法不允许有负边,某些算法如Bellman-Ford算法则允许有负边。 最短路径的表示 给定图 G = (V, E)我们对每一个节点 v∈V 设置其前驱节点π[v] 为另一节点或NIL。则借助于每个节点的前驱节点可以使用过程 PRINT-PATH(G, s, v) from Section 22.2 来构造每一条最短路径。 Print-Path输出图G中从s到v的路径上的所有节点。 松弛技术 Relaxation. 对每个顶点 v ∈ V,都设置一个属性 d[v],用来描述从源点 s 到 v.的最短路径权值的上界,称为最短路径估计。以下是对d[v]和π[v]的初始化过程。 松弛一条边的 (u, v) 的过程中要测试是否可以通过 u ,对迄今找到的到 v 的最短路径进行改进,若可以,则更新 d[v] 和π[v]。以上伪代码实现对边(u, v)的松弛。 Relax Relax 松弛与最短路径算法 本章的每个算法都要调用 INITIALIZE-SINGLE-SOURCE ,然后重复对边进行松弛操作。另外,松弛是改变最短路径和前驱的唯一方式。 本章中算法之间的区别在于对每条边进行松弛操作的次数,以及对边执行松弛操作的次序有所不同。 在Dijkstra算法以及对DAG图的最短路径算法中,对每条边仅执行一次松弛操作。 而在Bellman-Ford算法中,对每条边要执行多次松弛操作。 Bellman-Ford 该算法运用松弛技术,对每个顶点v ∈ V ,逐步减小从源s到v的最短路径的权的估计值d[v]直至达到实际最短路径的权δ(s, v)。算法返回TRUE ,当且仅当图中不含从源点可达的负权回路。 BELLMAN-FORD(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 for i ← 1 to |V[G]| - 1 3 do for each edge (u, v) ∈ E[G] 4 do RELAX(u, v, w) 5 for each edge (u, v) ∈ E[G] 6 do if d[v] d[u] + w(u, v) 7 then return FALSE 8 return TRUE 该算法的运行时间为O(VE)。 Bellman-Ford示例 源点为s. 距离 d 标记在节点内阴影边指示前驱值。每一趟按如下顺序进行松弛: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y). (b)-(e)展示了每一趟的操作结果。 Bellman-Ford算法的正确性 引理 24.2: 设 G = (V, E) 为带权有向图,源点为 s ,权函数为 w : E → R,并假定 G 从s可达的负权值回路,则经过 |V| - 1 次BELLMAN-FORD算法(2-4行)的迭代,对任何s可达的节点v有: d[v] = δ(s, v) 。 Proof We prove the lemma by appealing to the path-relaxation property. Consider any vertex v that is reachable from s, and let p = 〈v0, v1,..., vk〉, where v0 = s and vk =

文档评论(0)

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

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

1亿VIP精品文档

相关文档