Union-find Data Structure
Last time Today Next Trees within Graphs Trees within Graphs Final Spanning Trees More efficient END OF 15-122! Minimum Spanning Trees
Reminders • Final exam • Review session • Practice exams • Practice written homework
Spanning Tree A spanning tree is a s ubgraph of original graph that is a tree containing all vertices but only a minimal subset of the original edges 0 3 5 4 8 2 6 1 7
Finding a minimum spanning tree Edge- centric algorithm: Kruskal’s algorithm Sort edges T = graph_new For each edge (i,j) of G: Are i and j already connected in T? Yes: Discard edge No: Add edge to T Greedy algorithm Choice at each step will be part of the solution No need for backtracking
A-B (11) C-I (2) A-C (6) D-E (2) A-H (8) D-I (3) Boston A-I (5) F-H (3) 5 Erie Detroit B-C (7) F-I (9) 2 7 B-E (5) F-J (6) 2 2 3 C-D (2) G-H (1) 2 Indianapolis Columbus C-E (2) H-J (7) C-H(11) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
G-H (1) F-J (6) C-E (2) A-C (6) C-I (2) B-C (7) Boston D-E (2) H-J (7) 5 Erie Detroit C-D (2) A-H (8) 2 7 D-I (3) F-I (9) 2 2 3 F-H (3) C-H (11) 2 Indianapolis Columbus B-E (5) A-B (11) A-I (5) 11 5 6 9 11 Fort Worth Atlanta 8 6 3 7 Juarez Houston 1 Galveston
0 Spanning Tree 3 5 Complexity 4 General graph DFS/BFS 8 𝑃(𝑓) with adjacency lists 2 6 1 Running DFS/BFS on spanning tree 𝑃(𝑓) but 𝑓 = 𝑤 − 1 𝑃(𝑤) 7
Finding a minimum spanning tree Edge- centric algorithm: Kruskal’s algorithm Sort edges O(e log e) T = graph_new O(1) For each edge (i,j) of G: e Are i and j already connected in T? O(v) Yes: Discard edge O(1) No: Add edge to T O(1) = O(ev + e log e) O(ev) Where can we make it faster?
Canonical Representatives Trying to speed up connectivity check 0 3 5 4 9 8 Relation of being connected is • reflexive 2 • symmetric 6 • transitive 1 7
Canonical Representatives Trying to speed up connectivity check 0 3 5 4 9 8 Every connected component 2 is an equivalence class 6 1 7
Union-find 1. Check connectivity, finding canonical representative 2. Create union 0 3 5 4 9 8 2 6 1 7
Union-find data structure Basic Union-find Init 0 1 2 3 4 5 Edge order After (4,5) 0 1 2 3 4 4 (4,5) (3,5) (1,2) (3,4) (2,3) (0,2) (0,1) After (3,5) 0 1 2 3 3 4 After (1,2) 0 1 1 3 3 4 After (2,3) 0 1 1 1 3 4 0 5 After (0,2) 1 1 1 1 3 4 2 3 0 5 1 4 2 3 How fast is the connectivity check? 1 4
Union-find (UF) Tree 0 5 2 3 1 4
Finding a minimum spanning tree Edge- centric algorithm: Kruskal’s algorithm Sort edges O(e log e) T = graph_new O(1) For each edge (i,j) of G: e * Are i and j already connected in T? O(v) Yes: Discard edge O(1) No: Add edge to T O(1) = O(ev + e log e) O(ev) With our basic union-find, still O(v) because UF tree may not be balanced
Union-find data structure Basic Union-find Init 0 1 2 3 4 5 Edge order After (4,5) 0 1 2 3 4 4 (4,5) (3,5) (1,2) (3,4) (2,3) (0,2) (0,1) After (3,5) 0 1 2 3 3 4 After (1,2) 0 1 1 3 3 4 After (2,3) 0 1 1 1 3 4 0 5 After (0,2) 1 1 1 1 3 4 2 3 0 5 1 4 2 3 1 4
Height Tracking How should we combine trees to control height? Merge shorter tree into taller tree by appointing the root of the taller tree as the canonical representative of the combined tree height becomes the height of the bigger tree If trees have the same height, it does not matter which tree is merged into which height increases by 1
Union-find data structure 0 1 2 3 4 5 Basic Union-find Init -1 -1 -1 -1 -1 -1 Edge order After (4,5) -1 -1 -1 -1 -2 4 (4,5) (3,5) (1,2) (3,4) (2,3) (0,2) (0,1) After (3,5) -1 -1 -1 -3 3 4 After (1,2) -1 -2 1 -3 3 4 After (2,3) -1 -4 1 1 3 4 0 5 After (0,2) 1 -4 1 1 3 4 2 3 0 5 1 4 2 3 Negative numbers: height 1 4 (used for canonical rep. only)
Union-find data structure 0 1 2 3 4 5 Height-tracking Union-find Init -1 -1 -1 -1 -1 -1 Edge order After (4,5) -1 -1 -1 -1 -2 4 (4,5) (3,5) (1,2) (3,4) (2,3) (0,2) (0,1) After (3,5) -1 -1 -1 4 -2 4 After (1,2) -1 -2 1 4 -2 4 After (2,3) -1 -3 1 4 1 4 0 5 After (0,2) 1 -3 1 1 1 4 2 3 0 5 1 4 2 3 Negative numbers: height 1 4 (used for canonical rep. only)
Finding a minimum spanning tree Edge- centric algorithm: Kruskal’s algorithm Sort edges O(e log e) T = graph_new O(1) For each edge (i,j) of G: e * Are i and j already connected in T? O(log v) Yes: Discard edge O(1) No: Add edge to T O(1)
Union-find with Height Tracking G-H (1) B C-E (2) A B C D E F G H I J 1 C-I (2) E D D-E (2) 0 1 2 3 4 5 6 7 8 9 4 3 C-D (2) D-I (3) I F-H (3) 2 8 C B-E (5) A-I (5) F-J (6) A-C (6) B-C (7) H-J (7) 0 F A-H (8) A 5 F-I (9) 9 C-H (11) 7 A-B (11) J H 6 G
Recommend
More recommend