Minimum Spanning Trees 2704 BOS 867 849 PVD
Minimum Spanning Trees 2704 BOS 867 849 PVD ORD 740 621 1846 LAX 1391 1464 1235 144 JFK 1258 184 802 SFO 337 187 BWI 1090 DFW 946 1121 MIA 2342 © 2010 Goodrich, Tamassia Minimum Spanning Trees 1
Minimum Spanning Trees We will consider undirected weighted graphs. ORD Spanning subgraph n Subgraph of a graph G containing all the vertices of G. Spanning tree n Spanning subgraph that is itself a (free) tree. Minimum spanning tree (ελάχιστο επικαλύπτον δένδρο, MST) n Spanning tree of a weighted graph with minimum total edge weight. q Applications n Communications networks n Transportation networks © 2010 Goodrich, Tamassia 10 1 DEN PIT 9 STL 4 8 DFW Minimum Spanning Trees 6 7 3 DCA 5 2 ATL 2
Cycle Property: Let T be a minimum spanning tree of a weighted graph G. n Let e be an edge of G that is not in T and let C be the cycle formed by e with T. n For every edge f of C, weight(f) weight(e). Proof: n By contradiction. n If weight(f) > weight(e) we can get a spanning tree of smaller weight by replacing f with e. 2 4 C n © 2010 Goodrich, Tamassia 8 f 6 9 3 e 8 7 7 Replacing f with e yields a better spanning tree f 2 Minimum Spanning Trees 6 8 4 C 9 3 8 e 7 7 3
Partition Property U f Partition Property: Consider a partition of the vertices of G into subsets U and V. n Let e be an edge of minimum weight across the partition. n There is a minimum spanning tree of G containing edge e. Proof: n Let T be an MST of G. n If T does not contain e, consider the cycle C formed by e with T and let f be an edge of C across the partition. n By the cycle property, weight(f) weight(e). n Thus, weight(f) = weight(e). n We obtain another MST by replacing f with e. n © 2010 Goodrich, Tamassia V 7 4 9 5 2 8 8 3 e 7 Replacing f with e yields another MST U 2 Minimum Spanning Trees f V 7 4 9 5 8 8 3 e 7 4
Kruskal’s Algorithm q q q Maintain a partition of the vertices into clusters Algorithm Kruskal. MST(G) for each vertex v in G do Create a cluster consisting of v n Initially, single-vertex let Q be a priority queue. clusters. Insert all edges into Q n Keep an MST for each T cluster. {T is the union of the MSTs of the clusters} n Merge “closest” clusters while T has fewer than n - 1 edges do and their MSTs. e Q. remove. Min(). get. Value() [u, v] G. end. Vertices(e) A priority queue stores the A get. Cluster(u) edges outside clusters B get. Cluster(v) n Key: weight if A B then n Value: edge Add edge e to T merge. Clusters(A, B) At the end of the algorithm return T n One cluster and one MST. © 2010 Goodrich, Tamassia Minimum Spanning Trees 5
Kruskal’s Algorithm (cont’d) q q The notation object. function 1. function 2 in the code comes from object-oriented programming, and it means apply function 2 to the result of applying function 1 to object. In other words, Q. remove. Min(). get. Value() means get the value of the minimum element in the priority queue. Similarly, for other statements. The edge e selected inside the while loop is the edge in the priority queue Q with the minimum weight. u and v are the endpoints of this edge. The partition property guarantees that each time the body of the while loop is executed, the edge added is part of an MST. © 2010 Goodrich, Tamassia Minimum Spanning Trees 6
Example 8 B 5 1 6 3 H D 9 5 1 2 C 11 7 A 9 C 11 7 10 © 2010 Goodrich, Tamassia E 6 F 3 D H 1 2 A Campus Tour E 6 5 H C 11 10 2 G 9 7 F 3 8 B 4 4 D 10 G 8 5 F G 8 B 4 E C 11 10 B A 9 7 A 1 G 4 E 6 F 3 D H 2 7
Example (cont’d) B 5 1 G 8 9 6 H D 9 5 1 2 C 11 7 A 4 E 6 H D 10 A 5 9 C 11 7 10 © 2010 Goodrich, Tamassia E ep 6 F 3 D H G st o 4 8 B 1 2 A Campus Tour 2 four steps tw 8 B 1 G F 3 s 10 F 3 C 11 7 A E 8 B 4 G 5 9 C 11 7 10 4 E 6 F 3 D H 2 8
Example (cont’d) q q Red edges are edges of the MST. Dashed blue edges are edges that were considered by the algorithm but were discarded because their endpoints were already in the same cluster. © 2010 Goodrich, Tamassia Minimum Spanning Trees 9
Data Structures for Kruskal’s Algorithm q q q The graph will be implemented using adjacency lists. The algorithm maintains a forest of trees. A priority queue extracts the edges by increasing weight. The priority queue is implemented as a min heap. An edge is accepted if it connects distinct trees. We need a data structure that maintains a partition, i. e. , a collection of disjoint sets, with operations: n n n make. Set(u): create a set consisting of u find. Set(u): return the set storing u union(A, B): replace sets A and B with their union © 2010 Goodrich, Tamassia Minimum Spanning Trees 10
Data Structures for Kruskal’s Algorithm (cont’d) q For the disjoint sets data structure we will use the implementation using disjoint forests and the algorithm weighted quick-union with path compression by halving. © 2010 Goodrich, Tamassia Minimum Spanning Trees 11
Partition-Based Implementation q Partition-based version of Kruskal’s Algorithm n n Cluster merges as unions Cluster locations as find. Sets © 2010 Goodrich, Tamassia Algorithm Kruskal. MST(G) Initialize a partition P for each vertex v in G do P. make. Set(v) let Q be a priority queue. Insert all edges into Q T {T is the union of the MSTs of the clusters} while T has fewer than n - 1 edges do e Q. remove. Min(). get. Value() [u, v] G. end. Vertices(e) A P. find. Set(u) B P. find. Set(v) if A B then Add edge e to T P. union(A, B) return T Minimum Spanning Trees 12
Complexity Analysis q q Let n and m denote the number of vertices and edges of the input graph respectively. The priority queue can be initialized in O(m log m) time with repeated insertions or with the bottom up construction algorithm we have presented in the lecture on priority queues in O(m) time. The removal operations from the priority queue will take O(m log m) time. Alternative: Sort the edges in increasing order of weight and then scan them. This can also be done in O(m log m) time with algorithms mergesort of heapsort we will study. © 2010 Goodrich, Tamassia Minimum Spanning Trees 13
Complexity Analysis (cont’d) q q We will also need n-1 calls to union and at most m calls to find. Set. These operations will take O(n log m) time for the chosen disjoint-set data structure and algorithms. Therefore, the running time of Kruskal’s algorithm is O((n + m) log n) © 2010 Goodrich, Tamassia Minimum Spanning Trees 14
Prim-Jarnik’s Algorithm q q Similar to Dijkstra’s algorithm. We pick an arbitrary vertex s and we grow the MST as a cloud of vertices, starting from s. We store with each vertex v label D(v) representing the smallest weight of an edge connecting v to a vertex in the cloud. At each step: n n We add to the cloud the vertex u outside the cloud with the smallest distance label D(u). We update the labels D(z) of the vertices z adjacent to u. © 2010 Goodrich, Tamassia Minimum Spanning Trees 15
Prim-Jarnik’s Algorithm (cont’d) q q q We will use adjacency lists for the representation of the input graph. We will use a priority queue to store, for each vertex v, the pair (v, e) with key D(v) where e is the edge with the smallest weight connecting v to the cloud and D(v) is that weight. The priority queue will be implemented as a min heap. © 2010 Goodrich, Tamassia Minimum Spanning Trees 16
Prim-Jarnik’s Algorithm (cont. ) Algorithm Prim. Jarnik. MST(G) Pick any vertex v of G D[v] 0 for each vertex u v do D[u] + Initialize T . Initialize a priority queue Q with an entry ((u, null), D[u]) for each vertex u, where (u, null) is the value and D[u] is the key. while Q is not empty do (u, e) Q. remove. Min() Add vertex u and edge e to T. for each vertex z adjacent to u such that z is in Q do if weight((u, z)) < D[z] then D[z] weight((u, z)) Change to (z, (u, z)) the value of vertex z in Q Change to D[z] the key of vertex z in Q return the tree T © 2010 Goodrich, Tamassia Minimum Spanning Trees 17
Example 2 7 B 0 4 9 5 C 8 A D 7 F 8 E 3 This is the graph before the while loop is executed. The values of D[v] are shown in red near the vertices. In the first iteration of the while loop, the vertex A will be selected and then the algorithm will proceed as shown in the following slide. © 2010 Goodrich, Tamassia Minimum Spanning Trees 18
Example 2 7 B 0 2 B 5 C 0 © 2010 Goodrich, Tamassia 2 0 A 4 9 5 C 5 F 8 8 7 E 7 7 2 4 F 8 7 B 7 D 7 3 9 8 A D 7 5 F E 7 2 2 4 8 8 A 9 8 C 5 2 D E 2 3 7 7 B 0 Minimum Spanning Trees 3 7 7 4 9 5 C 5 F 8 8 A D 7 E 3 7 19 4
Example (contd. ) 2 2 B 0 4 9 5 C 5 F 8 8 A D 7 7 7 E 4 3 3 2 B 2 0 © 2010 Goodrich, Tamassia Minimum Spanning Trees 4 9 5 C 5 F 8 8 A D 7 7 7 E 3 3 20 4
Example (cont’d) q q q In an implementation, we can use a very big positive integer in the place of . All the weights are then assumed to be smaller than this integer. In the previous figures, red edges denote MST edges when they are inside the cloud. Red edges also denote edges of minimum weight connecting vertices in the MST (cloud) to vertices in Q. Dashed blue edges denote edges that have been discarded, inside the if statement of the algorithm, in favour of (red) edges with minimum weight. Upon completion of the algorithms, red edges form the MST. © 2010 Goodrich, Tamassia Minimum Spanning Trees 21
Complexity Analysis q q Let n and m denote the number of vertices and edges of the input graph respectively. The for loop takes O(n) time. Since the priority queue is implemented as a min heap, we can initialize it in O(n log n) time with repeated insertions or in O(n) using the bottom up construction algorithm we have presented in the lectures for heaps. We can extract the vertex u from the priority queue in O(log n) time. So the complexity for extracting all vertices is O(n log n). © 2010 Goodrich, Tamassia Minimum Spanning Trees 22
Complexity Analysis (cont’d) q q We can do the two change operations inside the if statement in O(log n) time as well (how can we augment the priority queue implementation to achieve this bound? ). This update is done at most once for each edge (u, z) so the total updates can be done in O(m log n). Hence, Prim-Jarnik’s algorithm runs in O((n + m) log n) time. © 2010 Goodrich, Tamassia Minimum Spanning Trees 23
Readings q q q M. T. Goodrich, R. Tamassia and D. Mount. Data Structures and Algorithms in C++. 2 nd edition. John Wiley. 2011. n Chapter 13 M. T. Goodrich and R. Tamassia. Δομές Δεδομένων και Αλγόριθμοι σε Java. 5η έκδοση. Εκδόσεις Δίαυλος. 2013. n Chapter 13 R. Sedgewick. Algorithms in C. 3 rd edition. Part 5. Graph Algorithms. n Chapter 20. © 2010 Goodrich, Tamassia Minimum Spanning Trees 24
- Slides: 24