programming-examples/java/Data_Structures/DisjointSets.java

34 lines
789 B
Java
Raw Normal View History

2019-11-15 12:59:38 +01:00
// https://en.wikipedia.org/wiki/Disjoint-set_data_structure with path compression heuristic
// Complexity of operations is O(log(n)) on average
public class DisjointSets {
public static int[] createSets(int size) {
int[] p = new int[size];
for (int i = 0; i < size; i++)
p[i] = i;
return p;
}
public static int root(int[] p, int x) {
return x == p[x] ? x : (p[x] = root(p, p[x]));
}
public static boolean unite(int[] p, int a, int b) {
a = root(p, a);
b = root(p, b);
if (a != b) {
p[a] = b;
return true;
}
return false;
}
// Usage example
public static void main(String[] args) {
int[] p = createSets(10);
System.out.println(false == (root(p, 0) == root(p, 9)));
unite(p, 0, 9);
System.out.println(true == (root(p, 0) == root(p, 9)));
}
}