single-sourceshortestpaths.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
single-sourceshortestpaths

Single-Source Shortest Paths Single-Source Shortest Paths Shortest-path problem 即是在一圖上找出兩點間最短路徑。 G=(V,E)是一個Weighted Directed Graph(加權有向圖)透過Weight function w: E?R界定出每個邊的權重。 以p=(v0,v1,…,vk)表一個自v0到vk的Path(路徑)。 Shortest-path problem 定義 定義自u到v的最短距離 Shortest-path tree rooted at s 對應於圖G=(V,E)的Shortest-path tree rooted at s (根於s之最短路徑樹) G’=(V’,E’),滿足下列三點: V’是s可達的點集合。 G’是一個以s為根的Rooted Tree。 在G’中s到v的simple path即為G中s到v的最短路徑。 Shortest-path tree rooted at s範例 Predecessor graph 對一圖G=(V,E),根據一個表π來建構的子圖Gπ=(Vπ,Eπ),滿足以下條件: π[s]=NIL,且s∈Vπ。 若π[v]≠NIL則(π[v],v)∈Eπ且v∈Vπ 。 Shortest-path tree rooted at s是Predecessor graph的特例。 Predecessor graph範例 Initialize-Single-Source演算法 定義變數d[v]代表目前已知之自s至v的最短距離。 定義變數π[v]代表目前已知自s至v的最短路徑上,v之前的那一點。 初始時,d[v]=∞,π[v]=NIL,d[s]=0。即除自s到s的最短路徑已知之外,其餘均設為未知。 Initialize-Single-Source演算法 Initialize-Single-Source(G,s) { for each vertex v∈V[G] do d[v]?∞ π[v]?NIL d[s]?0 } Relaxation 演算法 主要的目的在於利用邊(u,v)的資訊來更新目前所知的最短路徑。 Relax(u,v,w) { if d[v]d[u]+w(u,v) then d[v]?d[u]+w(u,v) π[v]?u } Relaxation 範例 最短路徑與Relaxation的性質 三角不等式: 對所有的邊(u,v),δ(s,v)?δ(s,u)+w(u,v)。 上限性質: δ(s,v)?d[v],即d[v]總是s?v的最短距離上限。一旦d[v]=δ(s,v),則Relaxation不會更改d[v]值。 最短路徑與Relaxation的性質 無路徑性質: 如果s到v並無路徑,則d[v]=δ(s,v)=∞。 收斂性質: 若s?v的最短路徑包含邊(u,v)且d[u]=δ(s,u),則此時執行Relax(u,v,w)會使得d[v]=δ(s,v)。 最短路徑與Relaxation的性質 Path-relaxation性質: 如p=(v0,v1,…,vk)是一個自s=v0?vk的最短路徑, 則依序執行Relax(v0,v1,w), Relax(v1,v2,w)…, Relax(vk-1,vk,w)會使得d[vk]=δ(s,vk)。 Predecessor graph性質: 當經過一連串的Relaxation後,對所有的點v, d[v]=δ(s,v)時,此時對應的Predecessor graph Gπ即是一個Shortest-path tree rooted at s。 Bellman-Ford演算法 可以計算出沒有負迴圈的圖之最短路徑。 Bellman-Ford(G,w,s) { Initialize-Single-Source(G,s) for i = 1 to |V-1| do for each edge (u,v)∈E do Relex(u,v,w) for each edge (u,v)∈E do if d[v]d[u]+w(u,v) then return false //代表有負迴圈 return true //代表計算成功 } Bellman-Ford演算法運作範例 Bellman-Ford演算法運作範例 Bellman-Ford演算法分析 正確性:對所有的邊作一次Relaxation則可將在Shortest-path tree rooted at s中一步可及的path正確計算出。由path-relaxation性質,做完|V|-1次之後,所有的Shortest simple path終點v,d[v]=δ(s,

文档评论(0)

ailuojue2 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档