Presentation is loading. Please wait.

Presentation is loading. Please wait.

Review of MST Algorithms Disjoint-Set Union Amortized Analysis

Similar presentations


Presentation on theme: "Review of MST Algorithms Disjoint-Set Union Amortized Analysis"— Presentation transcript:

1 Review of MST Algorithms Disjoint-Set Union Amortized Analysis
CS 332: Algorithms Review of MST Algorithms Disjoint-Set Union Amortized Analysis David Luebke /19/2019

2 Review: MST Algorithms
In a connected, weighted, undirected graph, will the edge with the lowest weight be in the MST? Why or why not? Yes: If T is MST of G, and A  T is a subtree of T, and (u,v) is the min-weight edge connecting A to V-A, then (u,v)  T The lowest-weight edge must be in the tree (A=) David Luebke /19/2019

3 Review: MST Algorithms
What do the disjoint sets in Kruskal’s algorithm represent? A: Parts of the graph we have connected up together so far David Luebke /19/2019

4 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

5 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1? David Luebke /19/2019

6 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

7 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2? 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

8 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

9 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5? 21 13 1 David Luebke /19/2019

10 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

11 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8? 25 5 21 13 1 David Luebke /19/2019

12 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

13 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9? 14 17 8 25 5 21 13 1 David Luebke /19/2019

14 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

15 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13? 1 David Luebke /19/2019

16 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

17 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14? 17 8 25 5 21 13 1 David Luebke /19/2019

18 Kruskal’s Algorithm Run the algorithm: Kruskal() { T = ;
for each v  V MakeSet(v); sort E by increasing edge weight w for each (u,v)  E (in sorted order) if FindSet(u)  FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } 2 19 9 14 17 8 25 5 21 13 1 David Luebke /19/2019

19 Review: Shortest-Path Algorithms
How does the Bellman-Ford algorithm work? How can we do better for DAGs? Under what conditions can we use Dijkstra’s algorithm? David Luebke /19/2019

20 Review: Running Time of Kruskal’s Algorithm
Expensive operations: Sort edges: O(E lg E) O(V) MakeSet()’s O(E) FindSet()’s O(V) Union()’s Upshot: Comes down to efficiency of disjoint-set operations, particularly Union() David Luebke /19/2019

21 Disjoint Set Union So how do we represent disjoint sets?
Naïve implementation: use a linked list to represent elements, with pointers back to set: MakeSet(): O(1) FindSet(): O(1) Union(A,B): “Copy” elements of A into set B by adjusting elements of A to point to B: O(A) How long could n Union()s take? David Luebke /19/2019

22 Disjoint Set Union: Analysis
Worst-case analysis: O(n2) time for n Union’s Union(S1, S2) “copy” 1 element Union(S2, S3) “copy” 2 elements Union(Sn-1, Sn) “copy” n-1 elements O(n2) Improvement: always copy smaller into larger How long would above sequence of Union’s take? Worst case: n Union’s take O(n lg n) time Proof uses amortized analysis David Luebke /19/2019

23 Amortized Analysis of Disjoint Sets
If elements are copied from the smaller set into the larger set, an element can be copied at most lg n times Worst case: Each time copied, element in smaller set 1st time resulting set size  2 2nd time  4 (lg n)th time  n David Luebke /19/2019

24 Amortized Analysis of Disjoint Sets
Since we have n elements each copied at most lg n times, n Union()’s takes O(n lg n) time Therefore we say the amortized cost of a Union() operation is O(lg n) This is the aggregate method of amortized analysis: n operations take time T(n) Average cost of an operation = T(n)/n David Luebke /19/2019

25 Amortized Analysis: Accounting Method
Charge each operation an amortized cost Amount not used stored in “bank” Later operations can used stored money Balance must not go negative Book also discusses potential method But we won’t worry about it here David Luebke /19/2019

26 The End David Luebke /19/2019


Download ppt "Review of MST Algorithms Disjoint-Set Union Amortized Analysis"

Similar presentations


Ads by Google