Presentation is loading. Please wait.

Presentation is loading. Please wait.

Minimum Spanning Trees. 2 有權重的圖 * 很多圖形演算法的問題都假設其輸入為有權重 的圖形. * 這裡我們假設權重都定在邊上面, 且權重值都 為正, 例如請參考上圖所顯示的圖形. a b c d e f gh 3 5 1 1 9 5 4 7 3 2 2 4 G=(V,E)

Similar presentations


Presentation on theme: "Minimum Spanning Trees. 2 有權重的圖 * 很多圖形演算法的問題都假設其輸入為有權重 的圖形. * 這裡我們假設權重都定在邊上面, 且權重值都 為正, 例如請參考上圖所顯示的圖形. a b c d e f gh 3 5 1 1 9 5 4 7 3 2 2 4 G=(V,E)"— Presentation transcript:

1 Minimum Spanning Trees

2 2 有權重的圖 * 很多圖形演算法的問題都假設其輸入為有權重 的圖形. * 這裡我們假設權重都定在邊上面, 且權重值都 為正, 例如請參考上圖所顯示的圖形. a b c d e f gh 3 5 1 1 9 5 4 7 3 2 2 4 G=(V,E)

3 Minimum Spanning Trees3 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 = n n-2.)

4 Minimum Spanning Trees4 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 ; }

5 Minimum Spanning Trees5 MST 基本引理 Let V = V 1 + V 2,  (V 1,V 2 ) = {uv | u  V 1 & v  V 2 }. if xy   (V 1,V 2 ) and w(xy) = min {w(uv)| uv   (V 1,V 2 )}, then xy is contained in a MST. a b c d e f gh 3 5 1 1 9 5 4 7 3 2 2 4 V1V1 V2V2 

6 Minimum Spanning Trees6 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| == n  1 ) break; } *How to check that adding an edge does not create a cycle?

7 Minimum Spanning Trees7 Kruskal’s Algorithm ( 例 1/3) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

8 Minimum Spanning Trees8 Kruskal’s Algorithm ( 例 2/3) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

9 Minimum Spanning Trees9 Kruskal’s Algorithm ( 例 3/3) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4 MST cost = 17

10 Minimum Spanning Trees10 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| == n  1 ) break; } find(x, y) = true iff. x and y are in the same set union(x, y): unite the two sets that contain x and y, respectively. find(x, y) = true iff. x and y are in the same set union(x, y): unite the two sets that contain x and y, respectively.

11 Minimum Spanning Trees11 Prim’s Algorithm (pseudo code 1) ALGORITHM Prim(G) // Input: A weighted connected graph G=(V,E) // Output: A MST T=(V, A) V T  { v 0 } // Any vertex will do; A   ; for i  1 to |V|  1 do find an edge xy   ( V T, V  V T ) s.t. its weight is minimized among all edges in  ( V T, V  V T ); V T  V T  { y } ; A  A  { xy } ;

12 Minimum Spanning Trees12 Prim’s Algorithm ( 例 1/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

13 Minimum Spanning Trees13 Prim’s Algorithm ( 例 2/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

14 Minimum Spanning Trees14 Prim’s Algorithm ( 例 3/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

15 Minimum Spanning Trees15 Prim’s Algorithm ( 例 4/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

16 Minimum Spanning Trees16 Prim’s Algorithm ( 例 5/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

17 Minimum Spanning Trees17 Prim’s Algorithm ( 例 6/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

18 Minimum Spanning Trees18 Prim’s Algorithm ( 例 7/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4

19 Minimum Spanning Trees19 Prim’s Algorithm ( 例 8/8) a b c d e f g h 3 5 1 1 9 4 4 7 3 2 2 4 MST cost = 17

20 Minimum Spanning Trees20 Prim’s Algorithm (pseudo code 2) Built a priority queue Q for V with key[u] =   u  V ; key[v 0 ] = 0;  [v 0 ] = 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] ); }

21 Minimum Spanning Trees21 Minimum Spanning Tree ( 分析 ) *Let n = |V( G)|, m =|E( G)|. *Execution time of Kruskal’s algorithm: (use union-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(n 2 ) ]adjacency lists + Fibonacci heap: O(n log n + m)


Download ppt "Minimum Spanning Trees. 2 有權重的圖 * 很多圖形演算法的問題都假設其輸入為有權重 的圖形. * 這裡我們假設權重都定在邊上面, 且權重值都 為正, 例如請參考上圖所顯示的圖形. a b c d e f gh 3 5 1 1 9 5 4 7 3 2 2 4 G=(V,E)"

Similar presentations


Ads by Google