Union-Find Algorithm - Set 2 (Union by Rank and Path Compression)
Union-Find Algorithm - Set 2 (Union by Rank and Path Compression)
The above union() and find() are naive and the worst case time complexity is linear. The trees created
to represent subsets can be skewed and can become like a linked list. Following is an example worst
case scenario.
Do Union(0, 1)
1 2 3
/
0
Do Union(1, 2)
2 3
/
1
/
0
https://www.geeksforgeeks.org/union-find-algorithm-set-2-union-by-rank/ 1/3
6/22/2019 Union-Find Algorithm | Set 2 (Union By Rank and Path Compression) - GeeksforGeeks
Do Union(2, 3)
3
/
2
/
1
/
0
The above operations can be optimized to O(Log n) in worst case. The idea is to always attach
smaller depth tree under the root of the deeper tree. This technique is called union by rank. The
term rank is preferred instead of height because if path compression technique (we have discussed it
below) is used, then rank is not always equal to height. Also, size (in place of height) of trees can also
be used as rank. Using size as rank also yields worst case time complexity as O(Logn) (See this for
proof)
Do Union(0, 1)
1 2 3
/
0
Do Union(1, 2)
1 3
/ \
0 2
Do Union(2, 3)
1
/ | \
0 2 3
The second optimization to naive method is Path Compression. The idea is to flatten the tree
when find() is called. When find() is called for an element x, root of the tree is returned.
The find() operation traverses up from x to find root. The idea of path compression is to make the
found root as parent of x so that we don’t have to traverse all intermediate nodes again. If x is root of a
subtree, then path (to root) from all nodes under x also compresses.
https://www.geeksforgeeks.org/union-find-algorithm-set-2-union-by-rank/ 2/3
6/22/2019 Union-Find Algorithm | Set 2 (Union By Rank and Path Compression) - GeeksforGeeks
/ | \
4 5 6
/ \ / \
0 3 7 8
/ \
1 2
9
/ / \ \
4 5 6 3
/ / \ / \
0 7 8 1 2
The two techniques complement each other. The time complexity of each operation becomes even
smaller than O(Logn). In fact, amortized time complexity effectively becomes small constant.
https://www.geeksforgeeks.org/union-find-algorithm-set-2-union-by-rank/ 3/3