cs 1501
play

CS 1501 www.cs.pitt.edu/~nlf4/cs1501/ Union Find Dynamic - PowerPoint PPT Presentation

CS 1501 www.cs.pitt.edu/~nlf4/cs1501/ Union Find Dynamic connectivity problem For a given graph G, can we determine whether or not two vertices are connected in G? Can also be viewed as checking subset membership Important for


  1. CS 1501 www.cs.pitt.edu/~nlf4/cs1501/ Union Find

  2. Dynamic connectivity problem For a given graph G, can we determine whether or not two ● vertices are connected in G? Can also be viewed as checking subset membership ● ● Important for many practical applications We will solve this problem using a union/find data structure ● 2

  3. A simple approach ● Have an id array simply store the component id for each item in the union/find structure How do we determine if two vertices are connected? ○ How do we establish the connected components? ○ Add graph edges one at a time to UF data structure using ■ union operations 3

  4. Example U(2, 0) 1 4 U(4, 7) U(1, 2) 0 2 5 7 U(3, 2) U(4, 5) U(5, 7) 3 6 U(6, 3) 0 1 2 3 4 5 6 7 ID: 0 1 6 3 6 3 1 3 6 0 1 2 6 3 4 4 5 6 4 7 4

  5. Analysis of our simple approach Runtime? ● ○ To find if two vertices are connected? ○ For a union operation? 5

  6. Union Find API Initialize with n items numbered 0 to n-1 Connect p with q UF (int n) void union(int p, int q) Return id of the connected component that p is in int find (int p) boolean connected (int p, int q) int count() True if p and q are connected Number of connected components 6

  7. Covering the basics public int count() { return count; } public boolean connected(int p, int q) { return find(p) == find(q); } 7

  8. Implementing the Fast-Find approach public UF(int n) { count = n; id = new int[n]; for (int i = 0; i < n; i++) { id[i] = i; } } public int find(int p) { return id[p]; } public void union(int p, int q) { int pID = find(p), qID = find(q); if (pID == qID) return; for(int i = 0; i < id.length; i++) if (id[i] == pID) id[i] = qID; count--; } 8

  9. Kruskal’s algorithm ● With this knowledge of union/find, how, exactly can it be used as a part of Kruskal’s algorithm? What is the runtime of Kruskal’s algorithm? ○ 9

  10. Kruskal's example revisited 0 PQ: 6 5 1: (0, 2) 1 1 3 2: (3, 5) 3: (1, 4) 5 5 2 4: (2, 5) 3 2 5: (2, 3) 6 4 5: (0, 3) 4 5 5: (1, 2) 6 6: (0, 1) 6: (2, 4) 6: (4, 5) 10

  11. Can we improve on union()’s runtime? What if we store our connected components as a forest of ● trees? Each tree representing a different connected component ○ Every time a new connection is made, we simply make one ○ tree the child of another 11

  12. Tree example 1 4 3 0 2 5 7 1 3 6 2 7 0 1 2 3 4 5 6 7 12

  13. Implementation using the same id array public int find(int p) { while (p != id[p]) p = id[p]; return p; } public void union(int p, int q) { int i = find(p); int j = find(q); if (i == j) return; id[i] = j; count--; } 13

  14. Forest of trees implementation analysis Runtime? ● ○ find(): ■ Bound by the height of the tree ○ union(): ■ Bound by the height of the tree ● What is the max height of the tree? Can we modify our approach to cap its max height? ○ 14

  15. Weighted tree example 1 4 0 2 5 7 3 6 2 7 0 1 2 3 4 5 6 7 15

  16. Weighted trees public UF(int n) { count = n; id = new int[n]; sz = new int[n]; for (int i = 0; i < n; i++) { id[i] = i; sz[i] = 1; } } public void union(int p, int q) { int i = find(p), j = find(q); if (i == j) return; if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; } else { id[j] = i; sz[i] += sz[j]; } count--; } 16

  17. Weighted tree approach analysis Runtime? ● ○ find()? ○ union()? Can we do any better? ● 17

  18. Kruskal’s algorithm, once again ● What is the runtime of Kruskal’s algorithm?? 18

  19. Path Compression find(4) find(0) 4 0 3 5 2 2 1 6 5 4 0 0 4 7 19

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend