Minimum Spanning Trees and Clustering By Swee-Ling Tang April 20, 2010 04/20/20101.
Minimum Spanning Trees
description
Transcript of Minimum Spanning Trees
Minimum Spanning Trees
Minimum Spanning Trees 2
有權重的圖
很多圖形演算法的問題都假設其輸入為有權重的圖形 .
這裡我們假設權重都定在邊上面 , 且權重值都為正 , 例如請參考上圖所顯示的圖形 .
ab
c d
e
f
g h
35
1 1
95
4
7
32
2
4
G=(V,E)
Minimum Spanning Trees 3
Minimum Spanning Trees (MST)
Find the lowest-cost way to connect all of the points (the cost is the sum of weights of the selected edges).
The solution must be a tree. (Why ?)
A spanning tree : a subgraph that is a tree and connect all of the points.
A graph may contains exponential number of spanning trees.
(e.g. # spanning trees of a complete graph = nn-2.)
Minimum Spanning Trees 4
A High-Level Greedy Algorithm for MST
The algorithm grows a MST one edge at a time and maintains that A is always a subset of some MST.
An edge is safe if it can be safely added to without destroying the invariant.
How to check that T is a spanning tree of G ? How to select a “safe edge” edge ?
A = ; while(T=(V,A) is not a spanning tree of G) { select a safe edge for A ; }
Minimum Spanning Trees 5
MST 基本引理Let V = V1 + V2, (V1,V2 ) = {uv | u V1& v V2 }.
if xy (V1,V2 ) and w(xy) = min {w(uv)| uv (V
1,V2 )}, then xy is contained in a MST.
ab
c d
e
f
g h
35
1 1
95
4
7
32
2
4
V1 V2
Minimum Spanning Trees 6
Kruskal’s Algorithm (pseudo code 1)
A= ;for( each edge in order by nondecreasing weight ) if( adding the edge to A doesn't create a cycle ){ add it to A; if( | A| == n1 ) break; }
How to check that adding an edge does not create a
cycle?
Minimum Spanning Trees 7
Kruskal’s Algorithm ( 例 1/3)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 8
Kruskal’s Algorithm ( 例 2/3)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 9
Kruskal’s Algorithm ( 例 3/3)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
MST cost = 17MST cost = 17
Minimum Spanning Trees 10
Kruskal’s Algorithm (pseudo code 2)
A = ; initial(n); // for each node x construct a set {x}for( each edge xy in order by nondecreasing weight)
if ( ! find(x, y) ) { union(x, y); add xy to A; if( | A| == n1 ) break; }
find(x, y) = true iff. x and y are in the same setunion(x, y): unite the two sets that contain x an
d y, respectively.
find(x, y) = true iff. x and y are in the same setunion(x, y): unite the two sets that contain x an
d y, respectively.
Minimum Spanning Trees 11
Prim’s Algorithm (pseudo code 1)
ALGORITHM Prim(G)// Input: A weighted connected graph G=(V,E)// Output: A MST T=(V, A) VT { v0 } // Any vertex will do; A ; for i 1 to |V|1 do find an edge xy (VT, VVT ) s.t. its weight is minimized among all edges in (VT, VVT ); VT VT { y } ; A A { xy } ;
Minimum Spanning Trees 12
Prim’s Algorithm ( 例 1/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 13
Prim’s Algorithm ( 例 2/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 14
Prim’s Algorithm ( 例 3/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 15
Prim’s Algorithm ( 例 4/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 16
Prim’s Algorithm ( 例 5/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 17
Prim’s Algorithm ( 例 6/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 18
Prim’s Algorithm ( 例 7/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
Minimum Spanning Trees 19
Prim’s Algorithm ( 例 8/8)
ab
cd
e
f
g h
35
1 1
94
4
7
32
2
4
MST cost = 17MST cost = 17
Minimum Spanning Trees 20
Prim’s Algorithm (pseudo code 2)
Built a priority queue Q for V with key[u] = uV;key[v0] = 0; [v0] = Nil; // Any vertex will do While (Q ) { u = Extract-Min(Q); for( each v Adj(u) ) if (v Q && w(u, v) < key[v] ) { [v] = u; key[v] = w(u, v); Change-Priority(Q, v, key[v]); }}
Minimum Spanning Trees 21
Minimum Spanning Tree ( 分析 )
Let n = |V( G)|, m =|E( G)|. Execution time of Kruskal’s algorithm: (use unio
n-find operations, or disjoint-set unions)
O(m log m ) = O(m log n )
Running time of Prim’s algorithm: adjacency lists + (binary or ordinary) heap:
O((m+n) log n ) = O(m log n )
adjacency matrix + unsorted list: O(n2)
adjacency lists + Fibonacci heap:O(n log n + m)