培訓- 6 グラフ理論 II
グラフ理論 II
Angrybird11 November 25, 2013
1 Minimum Spanning Tree
Introduction
• 樹 (spanning tree): 點 樹
樹 樹
• 樹 (minimum spanning tree): 樹
樹
樹 性
■ T G= (V, E) MST e(u, v)∈T T
樹 T1, T2 T1 G1 = (V1, E1) MST T2 G2 = (V2, E2)
MST ( G1 G T1 ; G2 G , T2 )
■ G1 樹 T1′ G
樹 T′ ={e(u, v)} ∪T1′∪T2 T 樹
點 MST 屬性
MST dynamic programming greedy algorithm
■ T G= (V, E) MST A G 點
A V \A e(u, v) e(u, v)∈T
■ e(u, v) /∈ T T 樹 u v
A V \A e(u, v)
樹 T 樹
MST 切割屬性 A V \A T
選擇 T MST 貪
婪選擇屬性
I
1.1 Prim's Algorithm グラフ理論 II
1.1 Prim's Algorithm
Prim 點 樹 選擇 樹
樹 點 點 樹
greedy
Heap O(ElogV)
Algorithm 1Prim's Algorithm
1: procedurePrim_Approach_to_finding_a_MST(G, V,E)
2: T ←any v ∈V
3: Q←V \T
4: whileQ̸=∅do
5: finde(u, v)∈E, u∈T, v∈Q that has the minimum w(u, v)
6: Q←Q\ {v}
7: T ←T ∪ {e(u, v)}
8: end while
9: returnT
10: end procedure
1.2 Kruskal's Algorithm
Kruskal
樹 樹
性 切割屬性
disjoint-set O(ElogE+E×α(V)) Algorithm 2Kruskal's Algorithm
1: procedureKruskal_Approach_to_finding_a_MST(G,V, E)
2: T ←∅
3: Q←E
4: whileQ̸=∅do
5: e(u, v)←extract_min Q
6: if u, v aren't in the same treethen
7: T ←T ∪ {e(u, v)}
8: end if
9: end while
10: return T
11: end procedure
II
2. Single Source Shortest Path グラフ理論 II
2 Single Source Shortest Path
Introduction
起點 點
2.1 BFS / DFS
( 樹)
2.2 Dijkstra's Algorithm
Dijkstra Prim Prim 選擇 樹 距離樹 點
Dijkstra 選擇 樹 距離起點 點
BFS Heap O(ElogV)
Dijkstra 性
Dijkstra Algorithm 3Dijkstra's Algorithm
1: procedureDijizztra_Approach_to_SSSP(G,V, E,s)
2: for allv ∈V do
3: d(v)← ∞
4: end for
5: d(s)←0
6: Q←V
7: whileQ̸=∅do
8: v ←Qextract the vertex which has the minimum distance
9: for alle(v, u)∈E do
10: d(u) = min{d(u), d(v) +w(v, u)}
11: end for
12: end while
13: return d
14: end procedure
III
2.3 Bellman-Ford Algorithm グラフ理論 II
2.3 Bellman-Ford Algorithm
Dijkstra
Bellman-Ford
(relax) d(v) 起點 v
點 u d(u)> d(v) +w(v, u) d(u) v
u
Dijkstra 點
點
|V| −1
|V| −1
Bellman-Ford O(V E)
Algorithm 4Bellman-Ford Algorithm
1: procedureBellman_Ford_Approach_to_SSSP(G,V, E,s)
2: for allv ∈V do
3: d(v)← ∞
4: end for
5: d(s)←0
6: for i= 1 to |V| −1do
7: for alle(v, u)∈E do
8: if d(u)> d(v) +w(v, u)then
9: d(u)←d(v) +w(v, u)
10: end if
11: end for
12: if not relaxed any vertex in this roundthen
13: break
14: end if
15: end for
16: return d
17: end procedure
2.4 Shortest Path Fast Algorithm
SPFA Bellman-Ford 點
點 IV
3. All Pairs Shortest Path グラフ理論 II
( queue) 點
點 v 點 u u u
Bellman-Ford 點
Dijkstra
Algorithm 5Shortest Path Fast Algorithm
1: procedureSPFA(G,V, E,s)
2: for allv ∈V do
3: d(v)← ∞
4: end for
5: d(s)←0
6: Q←s
7: whileQ̸=∅do
8: v ← extract Q
9: for all(v, u)∈E do
10: if d(u)> d(v) +w(v, u) then
11: d(u)←d(v) +w(v, u)
12: Q←Q∪ {u}
13: end if
14: end for
15: end while
16: return d
17: end procedure
3 All Pairs Shortest Path
Introduction
G 點 點
V Dijkstra Dijizztra 起 V Bellman-Ford O(V2E)
V
3.1 Floyd-Warshall Algorithm グラフ理論 II
3.1 Floyd-Warshall Algorithm
Floyd-Warshall dynamic programming dpi,j,k
點 i 點j 點 {1. . . k} :
dpi,j,k =min{dpi,j,k−1, dpi,k,k−1+dpk,j,k−1}
dp O(V3):
Algorithm 6Floyd-Warshall Algorithm
1: procedureFloyd_Warshall_Approach_to_APSP(G,V, E)
2: dp← ∞
3: for all(u, v)∈E do
4: dp(u, v)←w(u, v)
5: end for
6: for k = 1 to|V|do
7: for i= 1 to |V|do
8: for j = 1 to |V| do
9: dp(i, j)←min{dp(i, j), dp(i, k) +dp(k, j)}
10: end for
11: end for
12: end for
13: return dp
14: end procedure
3.2 Johnson's Algorithm
|V| Dijkstra Floyd-
Warshall
Johnson Johnson
G Dijkstra 點
Johnson
點 h(v)
(u, v) w′(u, v) =w(u, v) +h(u)−h(v)≥0 G′
VI
4. Exercises グラフ理論 II
G′ 距離
d′(t) =w′(s, v1) +w′(v1, v2) +. . .+w′(vk, t)
=w(s, v1) +h(s)−h(v1) +w(v1, v2) +h(v1)−h(v2) +. . .+w(vk, t) +h(vk)−h(t)
=w(s, v1) +w(v1, v2) +. . .+w(vk, t) +h(s)−h(t)
=d(t) +h(s)−h(t)≥0
d′ d G′
Dijkstra
h
Johnson w(u, v) +h(u)−h(v)≥0
h(v)≤h(u) +w(u, v) h(v) d(v)
d(v) Bellman-Ford
起點 d(v) 起點
d(v) Johnson 點 s
點 u e(s, u), w(s, u) = 0 點 d(v)
O(V E+V ×ElogV) Floyd-Warshall
4 Exercises
1. Prim Kruskal 性
2. <POJ 3723> Conscription
N M 10000
R (x, y, d) x y d
(10000−d) (N, M ≤104, R ≤105) 3. <APIO 2008> Roads
G= (V, E) 1 0 樹
K (|V| ≤2×105,|E| ≤106 )
4. <Codeforces 160D> Edges in MST
G= (V, E) 樹
樹 ( |V|,|E| ≤105 )
5. 樹
G= (V, E) 樹 (O(|V|2))
VII
4. Exercises グラフ理論 II
6. 樹
G= (V, E) e a(e), b(e) 樹 T
∑
e∈T
a(e)
∑
e∈T
b(e)
7. <NPSC 2010>
N 離 點(0,0) 點(1000,1000)
8. <IOI 2011> Crocodile
G= (V, E) 點v 點 u
選 點
VIII