cs 225
play

CS 225 Data Structures No Novem ember er 4 Di Disjoint Sets G - PowerPoint PPT Presentation

CS 225 Data Structures No Novem ember er 4 Di Disjoint Sets G G Carl Evans Heap Heap Sort 4 1. 5 6 2. 15 9 7 20 3. 16 25 11 14 12 4 5 6 15 9 7 20 16 25 14 12 11 Running Time? Why do we care about another


  1. CS 225 Data Structures No Novem ember er 4 – Di Disjoint Sets G G Carl Evans

  2. Heap Heap Sort 4 1. 5 6 2. 15 9 7 20 3. 16 25 11 14 12 4 5 6 15 9 7 20 16 25 14 12 11 Running Time? Why do we care about another sort?

  3. A( A(no nothe her) ) throwback k to CS 173… Let R be an equivalence relation on us where (s, t) ∈ R if s and t have the same favorite among: { ___, ___, ____, ___, ____, }

  4. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6

  5. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6 Operation: find(4)

  6. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6 Operation: find(4) == find(8)

  7. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6 Operation: if ( find(2) != find(7) ) { union( find(2), find(7) ); }

  8. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6 Key Ideas: • Each element exists in exactly one set. • Every set is an equitant representation. • Mathematically: 4 ∈ [0] R à 8 ∈ [0] R • Programmatically: find(4) == find(8)

  9. Di Disjoint S Sets A ADT • Maintain a collection S = {s 0 , s 1 , … s k } • Each set has a representative member. • API: void makeSet(const T & t); void union(const T & k1, const T & k2); T & find(const T & k);

  10. Im Implem plemen entatio tion n #1 0 1 4 2 7 3 5 6 0 1 2 3 4 5 6 7 Find(k): Union(k1, k2):

  11. Implem Im plemen entatio tion n #2 • We will continue to use an array where the index is the key • The value of the array is: • -1, if we have found the representative element • The index of the parent , if we haven’t found the rep. element • We will call theses UpTrees : 0 1 2 3 0 1 2 3 -1 -1 -1 -1

  12. Up UpTrees ees 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3

  13. Di Disjoint S Sets 2 5 9 7 0 1 4 8 3 6 4 3 7 5 6 0 8 9 2 1 0 1 2 3 4 5 6 7 8 9 4 8 5 6 -1 -1 -1 -1 4 5

  14. Di Disjoint S Sets F Find 1 int DisjointSets::find() { 2 if ( s[i] < 0 ) { return i; } 3 else { return _find( s[i] ); } 4 } Running time? What is the ideal UpTree?

  15. Di Disjoint S Sets U Union 1 void DisjointSets::union(int r1, int r2) { 0 4 2 3 4 } 8 1

  16. Di Disjoint S Sets – Un Unio ion 4 7 8 6 9 10 3 0 1 2 5 11 0 1 2 3 4 5 6 7 8 9 10 11 6 6 6 8 -1 10 7 -1 7 7 4 5

  17. Disjoint S Di Sets – Sma Smart rt U Union on 4 7 8 6 9 10 3 0 1 2 5 11 Union by height Idea : Keep the height of 0 1 2 3 4 5 6 7 8 9 10 11 the tree as small as 6 6 6 8 10 7 7 7 4 5 possible.

  18. Di Disjoint S Sets – Sma Smart rt U Union on 4 7 8 6 9 10 3 0 1 2 5 11 Union by height Idea : Keep the height of 0 1 2 3 4 5 6 7 8 9 10 11 the tree as small as 6 6 6 8 10 7 7 7 4 5 possible. Idea : Minimize the 0 1 2 3 4 5 6 7 8 9 10 11 Union by size number of nodes that 6 6 6 8 10 7 7 7 4 5 increase in height Both guarantee the height of the tree is: _____________.

  19. Di Disjoint S Sets F Find 1 int DisjointSets::find(int i) { 2 if ( s[i] < 0 ) { return i; } 3 else { return _find( s[i] ); } 4 } 1 void DisjointSets::unionBySize(int root1, int root2) { 2 int newSize = arr_[root1] + arr_[root2]; 3 4 // If arr_[root1] is less than (more negative), it is the larger set; 5 // we union the smaller set, root2, with root1. 6 if ( arr_[root1] < arr_[root2] ) { 7 arr_[root2] = root1; 8 arr_[root1] = newSize; 9 } 10 11 // Otherwise, do the opposite: 12 else { 13 arr_[root1] = root2; 14 arr_[root2] = newSize; 15 } 16 }

  20. Pa Path Compression 10 9 11 1 7 8 2 4 3 5 6

  21. Di Disjoint S Sets A Anal alysis The iterated log function: The number of times you can take a log of a number. log*(n) = 0 , n ≤ 1 1 + log*(log(n)) , n > 1 What is lg*(2 65536 ) ?

  22. Di Disjoint S Sets A Anal alysis In an Disjoint Sets implemented with smart unions and path compression on find : Any sequence of m union and find operations result in the worse case running time of O( ____________ ), where n is the number of items in the Disjoint Sets.

Recommend


More recommend