6.2. Implementation

This sections discusses the implementation of disjoint sets.

Let us create the DisjointSet class:

public class DisjointSet {
    private final int[] subsets;

    public DisjointSet(int size) {
        subsets = new int[size];
        Arrays.fill(subsets, -1);
    }

    public DisjointSet(DisjointSet set) {
        subsets = Arrays.copyOf(set.subsets, set.subsets.length);
    }
}
  • L2: the size of subset (-1 implies 1 ID, -2 implies 2 IDs, and so on).

  • L5-6: every set is initialized with the size of 1.

  • L9: a copy constructor.

Let us define the find() method:

public int find(int id) {
    return (subsets[id] < 0) ? id : find(subsets[id]);
}
  • L2: returns the ID of the subset where the specific key belongs to.

What is the worst-case complexity of the find() method?

We then define the inSameSet() method:

  • L2: returns true if the two specific keys are in the same set.

Finally, let us define the union() method:

  • L2-4: return the subset ID where both key1 and key2 belongs to.

  • L6-10: merges the set containing key2 to the set containing key1.

  • L11-15: merges the set containing key1 to the set containing key2.

Last updated

Was this helpful?