Download presentation
Presentation is loading. Please wait.
Published byHelena Price Modified over 8 years ago
1
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part 9. Disjoint Sets
2
Prof. Amr Goneid, AUC2 Disjoint Sets What are Disjoint Sets? Tree Representation Basic Operations Parent Array Representation Simple Find and Simple Union Disjoint Sets Class Some Applications
3
Prof. Amr Goneid, AUC3 A set S is a collection of elements of the same type A disjoint-set data structure keeps track of a set of elements partitioned into a number of disjoint (non-overlapping) subsets. Disjoint sets: If S i and S j, i j are two sets, then S i S j = Ø Examples: S1 = {1,7,8,9}, S2 = {5,2,10}, S3 = {3,4,6} What are Disjoint Sets?
4
Prof. Amr Goneid, AUC4 One possible representation is a tree where a set can be identified by a parent node and children nodes. In this representation, children point to their parents, rather than the reverse. The representative of the subset is the ancestor of all elements in that subset (e.g. 1, 5, 3) S1 = {1,7,8,9}S2 = {5,2,10} S3 = {3,4,6} Union-Find Data Structure Tree Representation Union-Find Data Structure: Tree Representation 1 987102 5 64 3
5
Prof. Amr Goneid, AUC5 n disjoint nodes can be represented as n disjoint sets where each node is its own parent, i.e. p[i] = -1: Parent Array Representation 132 n 123n i p[i]
6
Prof. Amr Goneid, AUC6 Find(i): Given the element (i), find the set containing (i), i.e. find the representative of (i) = the root of the tree. Algorithm for Simple find: Keep traversing up the parent pointers until we hit the root. int find(int i) { while (p[i] >= 0) i = p[i]; return i; } Basic Operations
7
Prof. Amr Goneid, AUC7 The value in p[i] represents the parent of node (i). For the sets S1,S2,S3 shown before, we have: Simple Find 12345678910 5 3 31115 i p[i] find (1) 1 find (4) 3 find (10) 5
8
Prof. Amr Goneid, AUC8 Union(i,j): Given two disjoint sets S i and S j, obtain a set containing the elements in both sets, i.e., S i S j Algorithm for Simple union: Make the root of one of two trees point to the other, so now all elements have the same root and thus the same subset name. void union (int i, int j) { p [i] = j ; } Basic Operations
9
Prof. Amr Goneid, AUC9 Make set (i) the child of set (j) = union (i,j) Simple Union 1 987 102 5 1 987 2 5 Example: union(5,1)
10
Prof. Amr Goneid, AUC10 The parent array would change to: Simple Union 12345678910 5 3131115 i p[i]
11
Prof. Amr Goneid, AUC11 class Sets { private: int *p, n; public: Sets(int Size): n(Size)// Constructor { p = new int[n+1]; for (int i=0; i<=n; i++) p[i] = -1; } Disjoint sets class
12
Prof. Amr Goneid, AUC12 ~Sets()// Destructor { delete [ ] p; } void SimpleUnion(int i, int j); int SimpleFind(int i); }; Disjoint sets class
13
Prof. Amr Goneid, AUC13 // Make set(i) the child of set(j) void Sets::SimpleUnion(int i, int j) { p[i] = j; } // Find the parent set of subset(i) int Sets::SimpleFind(int i) { while (p[i]>=0) i = p[i]; return i; } Disjoint sets class
14
Prof. Amr Goneid, AUC14 Representation of disjoint collections of data Representation of Trees, Forests and Graphs Some Applications
15
Prof. Amr Goneid, AUC15 Learn on your own about: The C++ STL set container
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.