4.5. Minimum Spanning Trees •Definition of MST •Generic MST algorithm •Kruskal's algorithm •Prim's algorithm 1 Definition of MST • Let G=(V,E) be a connected, undirected graph. • For each edge (u,v) in E, we have a weight w(u,v) specifying the cost (length of edge) to connect u and v. • We wish to find a (acyclic) subset T of E that connects all of the vertices in V and whose total weight is minimized. • Since the total weight is minimized, the subset T must be acyclic (no circuit). • Thus, T is a tree. We call it a spanning tree. • The problem of determining the tree T is called the minimum-spanning-tree problem. 2 Application of MST: an example • In the design of electronic circuitry, it is often necessary to make a set of pins electrically equivalent by wiring them together. • To interconnect n pins, we can use n-1 wires, each connecting two pins. • We want to minimize the total length of the wires. • Minimum Spanning Trees can be used to model this problem. 3 Electronic Circuits: 4 Electronic Circuits: 5 Here is an example of a connected graph and its minimum spanning tree: 8 4 c b i 7 8 d 2 11 a 7 4 6 h 14 e 10 g 1 9 f 2 Notice that the tree is not unique: replacing (b,c) with (a,h) yields another spanning tree with the same minimum weight. 6 Growing a MST(Generic Algorithm) GENERIC_MST(G,w) 1 A:={} 2 while A does not form a spanning tree do 3 find an edge (u,v) that is safe for A 4 A:=A∪{(u,v)} 5 return A • Set A is always a subset of some minimum spanning tree. This property is called the invariant Property. • An edge (u,v) is a safe edge for A if adding the edge to A does not destroy the invariant. • A safe edge is just the CORRECT edge to choose to add to T. 7 How to find a safe edge We need some definitions and a theorem. • A cut (S,V-S) of an undirected graph G=(V,E) is a partition of V. • An edge crosses the cut (S,V-S) if one of its endpoints is in S and the other is in V-S. • An edge is a light edge crossing a cut if its weight is the minimum of any edge crossing the cut. 8 8 4 S↑ a c b i 7 V-S↓ d 2 11 8 7 4 6 h 14 e ↑S 10 g 1 9 f 2 ↓ V-S • This figure shows a cut (S,V-S) of the graph. • The edge (d,c) is the unique light edge crossing the cut. 9 Theorem 1 • Let G=(V,E) be a connected, undirected graph with a realvalued weight function w defined on E. • Let A be a subset of E that is included in some minimum spanning tree for G. • Let (S,V-S) be any cut of G such that for any edge (u, v) in A, {u, v} S or {u, v} (V-S). • Let (u,v) be a light edge crossing (S,V-S). • Then, edge (u,v) is safe for A. • Proof: Let Topt be a minimum spanning tree.(Blue) • • • • • A --a subset of Topt and (u,v)-- a light edge crossing (S, V-S) If (u,v) is NOT safe, then (u,v) is not in T. (See the red edge in Figure) There MUST be another edge (u’, v’) in Topt crossing (S, V-S).(Green) We can replace (u’,v’) in Topt with (u, v) and get another treeT’opt Since (u, v) is light , T’opt is also optimal. 1 1 1 1 2 1 1 1 10 Corollary .2 • Let G=(V,E) be a connected, undirected graph with a realvalued weight function w defined on E. • Let A be a subset of E that is included in some minimum spanning tree for G. • Let C be a connected component (tree) in the forest GA=(V,A). • Let (u,v) be a light edge (shortest among all edges connecting C with other components) connecting C to some other component in GA. • Then, edge (u,v) is safe for A. (For Kruskal’s algorithm) 11 The algorithms of Kruskal and Prim • The two algorithms are elaborations of the generic algorithm. • They each use a specific rule to determine a safe edge in line 3 of GENERIC_MST. • In Kruskal's algorithm, – The set A is a forest. – The safe edge added to A is always a least-weight edge in the graph that connects two distinct components. • In Prim's algorithm, – The set A forms a single tree. – The safe edge added to A is always a least-weight edge connecting the tree to a vertex not in the tree. 12 Kruskal's algorithm(basic part) 1 2 3 3 (Sort the edges in an increasing order) A:={} while E is not empty do { take an edge (u, v) that is shortest in E and delete it from E 4 if u and v are in different components then add (u, v) to A } Note: each time a shortest edge in E is considered. 13 Kruskal's algorithm MST_KRUSKAL(G,w) 1 A:={} 2 for each vertex v in V[G] 3 do MAKE_SET(v) 4 sort the edges of E by nondecreasing weight w 5 for each edge (u,v) in E, in order by nondecreasing weight 6 do if FIND_SET(u) != FIND_SET(v) 7 then A:=A∪{(u,v)} 8 UNION(u,v) 9 return A (Disjoint set is discussed in Chapter 21, Page 498) 14 Disjoint-Set (Chapter 21, Page 498) • Keep a collection of sets S1, S2, .., Sk, – Each Si is a set, e,g, S1={v1, v2, v8}. • Three operations – Make-Set(x)-creates a new set whose only member is x. – Union(x, y) –unites the sets that contain x and y, say, Sx and Sy, into a new set that is the union of the two sets. – Find-Set(x)-returns a pointer to the representative of the set containing x. – Each operation takes O(log n) time. 15 • Our implementation uses a disjoint-set data structure to maintain several disjoint sets of elements. • Each set contains the vertices in a tree of the current forest. • The operation FIND_SET(u) returns a representative element from the set that contains u. • Thus, we can determine whether two vertices u and v belong to the same tree by testing whether FIND_SET(u) equals FIND_SET(v). • The combining of trees is accomplished by the UNION procedure. • Running time O(|E| lg (|E|)). 16 The execution of Kruskal's algorithm (Moderate part) •The edges are considered by the algorithm in sorted order by weight. •The edge under consideration at each step is shown with a red weight number. 8 4 c b i 7 8 d 2 11 a 7 6 h 14 4 e 10 g 1 9 f 2 17 8 c b 4 i 7 8 d 2 11 a 7 h 10 g f 1 2 8 4 c d 2 i 7 8 7 b 11 a 14 4 6 h 9 e 10 g 1 e 14 4 6 9 f 2 18 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 19 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 20 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 21 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 22 Prim's algorithm(basic part) MST_PRIM(G,w,r) 1. A={} 2. S:={r} (r is an arbitrary node in V) 3. Q=V-{r}; 4. while Q is not empty do { 5 take an edge (u, v) such that (1) u S and v Q (v S ) and (u, v) is the shortest edge satisfying (1) 6 add (u, v) to A, add v to S and delete v from Q } 23 Prim's algorithm MST_PRIM(G,w,r) 1 for each u in Q do 2 key[u]:=∞ 3 parent[u]:=NIL 4 key[r]:=0; parent[r]=NIL; 5 QV[Q] 6 while Q!={} do 7 u:=EXTRACT_MIN(Q); if parent[u]Nil print (u, parent[u]) 8 for each v in Adj[u] do 9 if v in Q and w(u,v)<key[v] 10 then parent[v]:=u 11 key[v]:=w(u,v) 24 priority queue Q: three important operations – EXTRACT-MIN(Q) –takes log (n) times if there are n items in Q. – Insert an element (key u) into Q- takes log(n) time. – Update(u, k): update the key value of element u into k. It takes Olog (n) time for adaptable priority queue (heap). 25 • Grow the minimum spanning tree from the root vertex r. • Q is a priority queue, holding all vertices that are not in the tree now. • key[v] is the minimum weight of any edge connecting v to a vertex in the tree. • parent[v] names the parent of v in the tree. • When the algorithm terminates, Q is empty; the minimum spanning tree A for G is thus A={(v,parent[v]):v∈V-{r}}. • Running time: O(||E||lg |V|). 26 The execution of Prim's algorithm(basic part) 8 the root vertex 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 27 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 28 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 29 8 4 c b i 7 8 4 8 f 1 2 8 7 c d 2 i 7 14 4 6 h 9 e 10 g 1 e 10 g b 9 14 4 6 h 11 a d 2 11 a 7 f 2 30 8 4 c b i 7 8 d 2 11 a 7 6 h 14 4 e 10 g 1 9 f 2 Bottleneck spanning tree: A spanning tree of G whose largest edge weight is minimum over all spanning trees of G. The value of the bottleneck spanning tree is the weight of the maximum-weight edge in T. Theorem: A minimum spanning tree is also a bottleneck spanning tree. (Challenge problem) 31