<<

Today’s Outline

• Announcements – Assignment #4 coming soon . and Dynamic Equivalence Relations • Today’s Topics: – Leftist & Skew Heaps – Disjoint Sets & Dynamic Equivalence CSE 373 Data Structures and Algorithms

10/29/2010 1 10/29/2010 2

Motivation Disjoint Sets

Some kinds of data analysis require keeping track of • Two sets S 1 and S 2 are disjoint if and only if they transitive relations. have no elements in common . Equivalence relations are one family of transitive relations. ∩ ∅ •S1 and S 2 are disjoint iff S1 S2 = Grouping pixels of an image into colored regions is (the intersection of the two sets is the empty ) one form of data analysis that uses “dynamic equivalence relations”. Creating mazes without cycles is another application. For example {a, b, c} and {d, e} are disjoint. Later we’ll learn about “minimum spanning trees” for networks, and how the dynamic equivalence But {x, y, z} and {t, u, x} are not disjoint. relations help out in computing spanning trees.

10/29/2010 3 10/29/2010 4

Equivalence Relations Induced Equivalence Relations

• A binary relation R on a set S is an equivalence • Let S be a set, and let P be a partition of S.

relation provided it is reflexive, symmetric, and P = { S 1, S 2, . . . , Sk } transitive: P being a partition of S means that: ≠ → ∩ ∅ • Reflexive - R(a,a) for all a in S. i j Si Sj = and S ∪ S ∪ . . . ∪ S = S • Symmetric - R(a,b) → R(b,a) 1 2 k • Transitive - R(a,b) ∧ R(b,c) → R(a,c) • P induces an equivalence relation R on S: R(a,b) provided a and b are in the same (same of P). Is ≤ an equivalence relation on integers? Is “is connected by roads ” an equivalence relation on So given any partition P of a set S, there is a corresponding cities? equivalence relation R on S.

10/29/2010 5 10/29/2010 6

1 Example Introducing the -FIND ADT • S = {a, b, c, d, e} • Also known as the Disjoint Sets ADT or the P = { S , S , S } 1 2 3 Dynamic Equivalence ADT. S = {a, b, c}, S = {d}, S = {e} 1 2 3 • There will be a set S of elements that does not P being a partition of S means that: ≠ → ∩ ∅ change. i j Si Sj = and ∪ ∪ ∪ S1 S2 . . . Sk = S • We will start with a partition P 0, but we will • P induces an equivalence relation R on S: modify it over time by combining sets. R = { (a,a), (b,b), (c,c), (a,b), (b,a), (a,c), (c,a), • The combining operation is called “UNION” (b,c), (c,b), • Determining which set (of the current partition) an (d,d), element of S belongs to is called the “FIND” (e,e) } operation.

10/29/2010 7 10/29/2010 8

Example Union

• Maintain a set of pairwise disjoint * sets. • Union(x,y) – take the union of two sets named x – {3,5,7}, {4,2,8}, {9}, {1,6} and y • Each set has a unique name: one of its members – {3, 5,7} , {4,2, 8}, { 9}, { 1,6} – {3, 5,7}, {4,2, 8}, { 9}, { 1,6} – Union(5,1) {3, 5,7,1,6}, {4,2, 8}, { 9},

To perform the union operation, we replace sets x and y by (x ∪ y) *Pairwise Disjoint: For any two sets you pick, their intersection will be empty)

10/29/2010 9 10/29/2010 10

Find Application: Building Mazes

• Find(x) – return the name of the set containing x. • Build a random maze by erasing edges. – {3, 5,7,1,6}, {4,2, 8}, { 9}, – Find(1) = 5 – Find(4) = 8

10/29/2010 11 10/29/2010 12

2 Building Mazes (2) Building Mazes (3)

• Pick Start and End • Repeatedly pick random edges to delete.

Start Start

End End

10/29/2010 13 10/29/2010 14

Desired Properties A Cycle

• None of the boundary is deleted • Every cell is reachable from every other cell. • Only one path from any one cell to another (There are no cycles – no cell can reach itself by a path Start unless it retraces some part of the path.)

End

10/29/2010 15 10/29/2010 16

A Good Solution A Hidden Tree

Start Start

End End

10/29/2010 17 10/29/2010 18

3 Number the Cells Basic Algorithm •P = set of sets of connected cells •E = set of edges We have disjoint sets P ={ {1}, {2}, {3}, {4},… {36} } each cell is unto itself. We have all possible edges E ={ (1,2), (1,7), (2,8), (2,3), … } 60 edges total. • Maze = set of maze edges (initially empty) While there is more than one set in P { pick a random edge (x,y) and remove from E Start 1 2 3 4 5 6 u := Find(x); v := Find(y); 7 8 9 10 11 12 if u ≠ v then // removing edge (x,y) connects previously non- 13 14 15 16 17 18 // connected cells x and y - leave this edge removed! Union(u,v) 19 20 21 22 23 24 else // cells x and y were already connected, add this // edge to set of edges that will make up final maze. 25 26 27 28 29 30 add (x,y) to Maze } 31 32 33 34 35 36 End All remaining members of E together with Maze form the maze 10/29/2010 19 10/29/2010 20

Example Step Example P P Pick (8,14) P {1,2, 7,8,9,13,19} {1,2, 7,8,9,13,19,14,20 26,27} {1,2, 7,8,9,13,19} {3} Find(8) = 7 {3} {3} {4} Find(14) = 20 {4} Start 1 2 3 4 5 6 {4} {5} {5} {5} {6} {6} 7 8 9 10 11 12 {6} {10 } Union(7,20) {10 } {10 } {11, 17 } 13 14 15 16 17 18 {11, 17 } {11, 17 } {12 } {12 } {12 } {14, 20 ,26,27} 19 20 21 22 23 24 {15, 16 ,21} {14, 20 ,26,27} {15, 16 ,21} . 25 26 27 28 29 30 {15, 16 ,21} . . . . End {22,23,24,29,39,32 31 32 33 34 35 36 . {22,23,24,29,39,32 33, 34 ,35,36} {22,23,24,29,30,32 33, 34 ,35,36} 10/29/2010 33, 34 ,35,36} 21 10/29/2010 22

Example Example at the End

Pick (19,20) P P {1,2, 7,8,9,13,19 {1,2,3,4,5,6, 7,… 36} 14,20,26,27} Start 1 2 3 4 5 6 {3} Start 1 2 3 4 5 6 {4} E 7 8 9 10 11 12 {5} 7 8 9 10 11 12 Maze {6} 13 14 15 16 17 18 13 14 15 16 17 18 {10 } 19 20 21 22 23 24 {11, 17 } 19 20 21 22 23 24 {12 } 25 26 27 28 29 30 {15, 16 ,21} 25 26 27 28 29 30 . 31 32 33 34 35 36 End . 31 32 33 34 35 36 End {22,23,24,29,39,32 10/29/2010 33, 34 ,35,36} 23 10/29/2010 24

4 Implementing the Disjoint Sets ADT Up-Tree for Disjoint Union/Find • n elements , Total Cost of: m finds, ≤ n-1 unions Initial state: 1 2 3 4 5 6 7

• Target complexity: O(m+n) i.e. O(1) amortized After several 1 3 7 Unions: • O(1) worst-case for find as well as union would be 2 5 4 great, but… Known result : both find and union cannot be done Roots are the names of each set. 6 in worst-case O(1) time

10/29/2010 25 10/29/2010 26

Find Operation Union Operation

Find(x) - follow x to the root and return the root Union(x,y) - assuming x and y are roots, point y to x.

1 3 7 Union(1,7) 1 3 7 2 5 4 2 5 4 Find(6) = 7 6 6

10/29/2010 27 10/29/2010 28

Simple Implementation Implementation • Array of indices int Find(int x) { void Union(int x, int y) { while(up[x] != 0) { up[y] = x; Up[x] = 0 means x = up[x]; } 1 2 3 4 5 6 7 x is a root. } up 0 1 0 7 7 5 0 return x; runtime for Union(): } 1 3 7 runtime for Find():

2 5 4 runtime for m Finds and n-1 Unions: 6 10/29/2010 29 10/29/2010 30

5 Find Solutions Now this doesn’t look good  Can we do better? Yes!

Recursive Find(up[] : integer array, x : integer) : integer { 1. Improve union so that find only takes Θ(log n) //precondition: x is in the range 1 to size// • Union-by-size if up[x] = 0 then return x else return Find(up,up[x]); • Reduces complexity to Θ(m log n + n) } Iterative 2. Improve find so that it becomes even better! Find(up[] : integer array, x : integer) : integer { //precondition: x is in the range 1 to size// • Path compression while up[x] ≠ 0 do • Reduces complexity to Θ(m + n) x := up[x]; return x; }

10/29/2010 31 10/29/2010 32

A Bad Case Weighted Union

• Weighted Union 1 2 3 … n Union(2,1) – Always point the smaller (total # of nodes) tree to the root of the larger tree 2 3 … n

1 Union(3,2) W-Union(1,7) 3 … n : : 1 3 7 2 2 1 4 n Union(n,n-1) 1 2 5 4 3

2 Find(1) n steps!! 6 1 10/29/2010 33 10/29/2010 34

Example Again Analysis of Weighted Union

With weighted union an up-tree of height h has weight at h 1 2 3 … n least 2 . W-Union(2,1) … 2 3 n • Proof by induction 0 1 W-Union(3,2) – Basis : h = 0. The up-tree has one node, 2 = 1 2 … n : – Inductive step : Assume true for all h’ < h. : 1 3 W-Union(n,2) h-1 T W(T 1) > W(T 2) > 2 2 Minimum weight Weighted Induction h-1 1 3 … n up-tree of height h union hypothesis Find(1) constant time T1 T formed by 2 W( T) > 2h-1 + 2 h-1 = 2 h weighted unions 10/29/2010 35 10/29/2010 36

6 Worst Case for Weighted Union Analysis of Weighted Union (cont) Let T be an up-tree of weight n formed by weighted union. Let h be its height. n/2 Weighted Unions n > 2h

log 2 n > h n/4 Weighted Unions • Find(x) in tree T takes O(log n) time. – Can we do better?

10/29/2010 37 10/29/2010 38

Example of Worst Case (cont’) Array Implementation

After n/2 + n/4 + …+ 1 Weighted Unions: 1 3 7 2 1 4

2 5 4

log 2n 6 1 2 3 4 5 6 7 Find up -1 1 -1 7 7 5 -1 If there are n = 2 k nodes then the longest weight 2 1 4 path from leaf to root has length k.

10/29/2010 39 10/29/2010 40

Weighted Union Nifty Storage Trick

W-Union(i,j : index){ • Use the same array representation as before //i and j are roots new runtime for Union(): wi := weight[i]; –1 wj := weight[j]; • Instead of storing for the root, if wi < wj then simply store –size up[i] := j; new runtime for Find(): weight[j] := wi + wj; else up[j] :=i; [Read section 8.4, page 299] weight[i] := wi +wj; } runtime for m finds and n-1 unions =

10/29/2010 41 10/29/2010 43

7 How about Union-by-height ? Path Compression • Can still guarantee O(log n) worst case depth • On a Find operation point all the nodes on the search path directly to the root. Left as an exercise!

1 7 • Problem: Union-by-height doesn’t combine very well with the new find optimization technique we’ll see next 2 5 4 PC-Find(3)

6 8 9

3 10

10/29/2010 44 10/29/2010 45

Student Activity Draw the result of Find(e): Self-Adjustment Works

c g

a f h PC-Find(x)

b d x

i e

10/29/2010 47 10/29/2010 48

Path Compression Find Interlude: A Really Slow Function

PC-Find(i : index) { Ackermann’s function is a really big function A( x, y) with r := i; inverse α(x, y) which is really small while up[r] ≠ -1 do //find root r := up[r]; How fast does α(x, y) grow? // Assert: r= the root, up[r] = -1 α ≠ (x, y) = 4 for x far larger than the number of atoms in the if i r then // if i was not a root universe (2 300 ) temp := up[i]; while temp ≠ r do // compress path α shows up in: up[i] := r; – Computation Geometry (surface complexity) i := temp; – Combinatorics of sequences temp := up[temp]

return(r) (New?) runtime for Find: } 10/29/2010 49 10/29/2010 50

8 A More Comprehensible Slow Function Complex Complexity of Union-by-Size + Path Compression log* x = number of times you need to compute log to bring value down to at most 1 Tarjan proved that, with these optimizations, p union and find operations on a set of n elements have worst case complexity of O( p ⋅ α(p, n)) E.g. log* 2 = 1 log* 4 = log* 2 2 = 2 log* 16 = log* 2 22 = 3 (log log log 16 = 1) For all practical purposes this is amortized constant time: 2 log* 65536 = log* 2 22 = 4 (log log log log 65536 = 1) O( p ⋅ 4) for p operations! log* 2 65536 = …………… = 5 • Very complex analysis – worse than splay tree analysis etc. that Take this: α(m,n) grows even slower than log* n !! we skipped!

10/29/2010 51 10/29/2010 52

Disjoint Union / Find Amortized Complexity with Weighted Union and PC • Worst case time complexity for a W-Union is O(1) • For disjoint union / find with weighted union and and for a PC-Find is O(log n). path compression. • Time complexity for m ≥ n operations on n – average time per operation is essentially a constant. elements is O(m log* n) where log* n is a very – worst case time for a PC-Find is O(log n). slow growing function. • An individual operation can be costly, but over – Log * n < 7 for all reasonable n. Essentially constant time the average cost per operation is not. time per operation!

10/29/2010 53 10/29/2010 54

9