Union Find
Union Find
1. Introduction
2. Implementation
// Weighted Union Find
class UnionFind {
int[] sets; // number of individual sets
int[] size; // size of each set
public UnionFind(int n) {
sets = new int[n];
size = new int[n];
for (int i = 0; i < n; i++) {
sets[i] = i;
size[i] = 1;
}
}
public int find(int[] sets, int node) {
while (node != sets[node]) {
node = sets[node];
}
return node;
}
public void union(int node1, int node2) {
int p = find(sets, node1);
int q = find(sets, node2);
// node1 and node2 are in the same set
if (p == q) {
return;
}
// merge set with smaller size into set with larger size
if (size[p] < size[q]) {
sets[p] = q;
size[q] += size[p];
}
else {
sets[q] = p;
size[p] += size[q];
}
}
}3. Time & Space Complexity
4. Use of Union-Find
Last updated