时间复杂度分析AlgorithmFloyd

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Floyd-Warshell algorithm (3)
考慮中間點僅可能為 {1,…,k}。
如k不在ij最短路徑上,則中間點僅可能為 {1,…,k-1},故此時:d(k)(i, j) = d(k-1)(i, j)。 如k在ij最短路徑上,則將ik及kj兩段分 開看,這兩個路徑必然不可能有中間點為k,否 則依照無負迴圈的假定,ik或kj不是最短 路徑,違背最短路徑的性質。故此時: d(k)(i, j) = d(k-1)(i, k) + d(k-1)(k, j)。
dijkstra’s algorithm(1)
給定一個加權圖 G 及源點為 v,求 頂點 v 到其他頂點的最短路徑。 令 D[u] 表示 v 到 u 的最短路徑,則 初始狀態
D[v] = 0 對每一個 u ≠ v,D[u] = +∞ 令集合 C = {}
dijkstra’s algorithm(2)
2
24
9
3
s
14
18 2 6
6
30 15 5 6 20 16 11
4
19
5
7
44
t
Examples: Dijkstra Algorthm
1 0 0 0 0 0 0 0 0 1 ∞ 2 ∞ 9 9 9 9 9 9 9 2 1 3 ∞ ∞ 33 32 32 32 32 32 3 6 4 ∞ ∞ ∞ ∞ ∞ ∞ 45 45 4 5 5 ∞ ∞ ∞ 44 35 34 34 34 5 3 6 ∞ 14 14 14 14 14 14 14 6 1 7 ∞ 15 15 15 15 15 15 15 7 1 8 ∞ ∞ ∞ ∞ 59 51 50 50 8 5 C={} C={1} C={1, 2} C={1, 2, 6} C={1, 2, 4,7} C={1, 2, 3, 6, 7} C={1, 2, 3, 5, 6, 7} C={1, 2, 3, 4, 5, 6, 7} 集合
當 C ≠ V(G) 時
找出一個 頂點 u ∉ C ,且使得 D[u] 為最小。 將 u 加入 C 中,並將所有與 u 相連且不在C中 的頂點 z,計算其 D[z] if D[u] + w((u, z)) < D[z] then D[z] D[u] + w((u, z))
Examples
Chapter 7 加權圖
Chang Chi-Chung 2011.12.08
加權圖 (weighted graph)
若一個圖形,每個邊都有一個相關連的數 值標籤 w(e) ,此數值標籤又稱為邊 e 的權 重,則此圖形即為加權圖。
A
5
B
A
7
C B
6
12
8
D
C
D
4
7
ห้องสมุดไป่ตู้
最短路徑
假設 G 為一個加權圖。路徑 P 的長度 (length) 或權重 (weight) 等於 P 中各邊權重 的總和。 若 P 由邊 e0, e1, e2, … , ek-1 組成,則 P 的長 度記為 w(P),定義為
時間複雜度分析(2)
若採取未排序的序列來實作優先權佇列, 則 每次選取目前最小路徑點,須 Ω (n) 每選取目前最小路徑頂點u 後,計算所有與 u 相連且不在C中的頂點 z 之 D[z],須 O(1) 每個頂點都必須被考慮到,因此總執行時 間為 Σ (n +deg(u)) for v ∈ G,即 O( n2+m)
0 A[i, j ] w(i, j ) if i j if (i, j) E (G ) 其他
若 (vi, … ,vk, … ,vj) 為 vi 到 vj 的最短路徑, 則(vi,…,vk) 必為 vi 到 vk的最短路徑。換言 之,所有最短路徑的子路徑均為最短路徑 。
到點8的最短路徑: 由陣列找尋順序為 85361,所以最短路徑為 16358
時間複雜度分析(1)
用優先權佇列維護目前源點到頂點u 的距離 ,其中頂點u 不屬於集合 C。則 每次選取目前最小路徑點,須 O(log n) 每選取目前最小路徑頂點u 後,計算所有與 u 相連且不在C中的頂點 z 之 D[z],須 O(deg(u)log n) (因為須更新佇列中 D[z]值) 每個頂點都必須被考慮到,因此總執行時 間為 Σ (1+deg(u)) log n) for v ∈ G,即 O((n+m) log n) O(m log n) O( n2logn)
i 中間點僅有 {1,…,k-1} k 中間點僅有 {1,…,k-1} j
w( P )
w(e )
i 0 i
k 1
在G 中,從頂點 v 到頂點 u 的距離,記為 d(v, u) ,是指 v 到 u 的最小長度路徑,稱為 最短路徑 (shortest path)。
單一源點的最短路徑
單一源點的最短路徑 (single-source shortest path) 給定一個加權圖 G ,找出 某頂點 v 到其他 頂點的最短路徑,稱為單一源點最短路徑 問題。 解決此問題的演算法 dijkstra’s algorithm, 主要採用 Greedy Method。
Floyd-Warshell algorithm (2)
定義矩陣 d(m)(i, j)為自 ij 的最短路徑長度 ,其中路徑僅使用頂點集合 (v1, v2, …, vk) 。則
if i j 0 (0) d (i, j ) w(i, j ) if (i, j ) E (G ) other d ( k ) (i, j ) min{d ( k 1) (i, j ), d ( k 1) (i, k ) w(k , j )}
完全配對最短路徑
完全配對最短路徑 (all-pairs shortest paths) 給定一個加權圖 G中,求任兩點的最短距 離。 最著名的解法是 Floyd-Warshell algorithm ,使用動態規劃法求解。
Floyd-Warshell algorithm (1)
將加權圖G 以鄰接矩陣表示,則
相关文档
最新文档