Disjoint Set

5
Disjoint set manipulation: [2L] Date:22.07.2014 Set manipulation algorithm like UNION-FIND, union by rank. Preliminary definitions A set is a collection of objects. Set A is a subset of set B if all elements of A are in B. Subsets are sets Union of two sets A and B is a set C which consists of all elements in A and B Two sets are mutually disjoint if they do not have a common element. A partition of a set is a collection of subsets such that Union of all these subsets is the set itself Any two subsets are mutually disjoint. S = {1,2,3,4}, A = {1,2}, B = {3,4}, C = {2,3,4}, D = {4} Is A, B a partition of S? Yes Is A, C partition of S? No Is A, D a partition of S? No Let S1={1,7,8,9}, S2={5,2,10}, S3={3,4,6} The operations we wish to perform on sets are:

description

SimpleUnion, Find, WeightedUnion,

Transcript of Disjoint Set

Disjoint set manipulation: [2L] Date:22.07.2014Set manipulation algorithm like UNION-FIND, union by rank.Preliminary definitions A set is a collection of objects. Set A is a subset of set B if all elements of A are in B. Subsets are sets Union of two sets A and B is a set C which consists of all elements in A and B Two sets are mutually disjoint if they do not have a common element. A partition of a set is a collection of subsets such that Union of all these subsets is the set itself Any two subsets are mutually disjoint.S = {1,2,3,4}, A = {1,2}, B = {3,4}, C = {2,3,4}, D = {4}Is A, B a partition of S?

Yes

Is A, C partition of S?

No

Is A, D a partition of S?

No

Let S1={1,7,8,9}, S2={5,2,10}, S3={3,4,6}The operations we wish to perform on sets are:

In presenting the union and find algorithms, we ignore the set names and identify sets just by the roots of the trees representing them. This simplifies the discussion. Since set set elements are numbered 1 through n, we represent the tree nodes using an array p[1:n], where n is maximum number of elements.

The above figure can be represented asi[1][2][3][4][5][6][7][8][9][10]

P-15-13-131115

Note that root node have a parent of -1We can now implement Find(i) as: starting at i until we reach a node with parent value -1. For example, Find(2) starts at 2 and then moves to 5, since p[5] is -1, so we have reached root. Union(i,j) is as simple as Find() operation. We pass in two trees with root i and j. Adopting the convention that the first tree becomes a subtree of the second, the statement p[i]:= j accomplish the union.

Now using the above algorithm, let us process the following sequence of union-find operations:Union(1,2), Union(2,3), .... Union(n-1,n)Find(1), Find(2), ...., Find(n).This sequence results the following degenerate tree. Since the time taken for a union is constant, the (n-1) unions can be processed in time O(n). Since the time required to process a find for an element at level i of a tree is O(i), the total time needed to process the n finds is.

We can improve this performance avoiding the creation of degenerate tree. Will improve the worst case find complexity to log N When we do a union operation make the smaller tree a subtree of the bigger one Thus the root of the smaller subtree becomes a child of the root of the bigger one. A = {1,2,3} B = {4} Root of B is root of A after union, B is subtree of A Alternatively, union operation can be done by height as well Tree of lesser height is made subtree of the other. We consider only size here. If j is a root, S[j] = - size of tree rooted at jIf j is not a root, S[j] = parent of jWhy is S[j] not equal to the size of tree j, if j is a root?Size of tree j is an integer, if S[j]=size of tree j and j is root, then it would look like root of j is another element, thus j is not rootWeighting rule for Union(i,j): If the number of nodes in the tree with root I is less than the number in the tree with root j, then make j the parent of I; otherwise make I the parent of j.To implement the weighting rule, we need to know how many nodes there are in every tree. To do this easily, we maintain a count field in the root of every tree. If i is a root node, then count[i] equals the number of nodes in that tree. Since all nodes other than the roots of trees have a positive number in the p field, we can maintain the count in the p field of the roots as negative number [Ref: Computer Algorithms-Sahani].

Consider the behaviour of WeightedUnion on the following sequence of unions starting from the initial configuration p[i]=-count[i]= -1, 8 I 1 =n;Union(1, 2), Union(3, 4), Union(5, 6), Union(7, 8), Union(1, 3), Union(5, 7), Union(1, 5)We will get the the following tree as given below: Consider we process eight finds in the beside mentioned tree.If SimpleFind is used, each Find(8) requires going up three parent link fields for a total of 24 moves to process all eight finds. We can think it in different way:Collapsing Rule: If j is a node on the path from i to its root and p[i]root[i], then set p[j] to root[i].

Again come back to the above mentioned problem. Now instead of SimpleFind, if we use CollapsingFind, first Find(8) requires going up three links need to be reset, CollapsingFind will reset three (the arent of 5 is reset to 1). Each of the remaining finds requires going up only one link field. The total cost is now only 13 moves.