Threads
java ( 1827371 ) - java ( 1827386 ) stack: com.thealgorithms.searches.UnionFind.main(UnionFind.java:67)
package com.thealgorithms.searches;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class UnionFind {
private final int[] p;
private final int[] r;
public UnionFind(int n) {
p = new int[n];
r = new int[n];
for (int i = 0; i < n; i++) {
p[i] = i;
}
}
public int find(int i) {
int parent = p[i];
if (i == parent) {
return i;
}
final int result = find(parent);
p[i] = result;
return result;
}
public void union(int x, int y) {
int r0 = find(x);
int r1 = find(y);
if (r1 == r0) {
return;
}
if (r[r0] > r[r1]) {
p[r1] = r0;
} else if (r[r1] > r[r0]) {
p[r0] = r1;
} else {
p[r1] = r0;
r[r0]++;
}
}
public int count() {
List parents = new ArrayList<>();
for (int i = 0; i < p.length; i++) {
if (!parents.contains(find(i))) {
parents.add(find(i));
}
}
return parents.size();
}
public String toString() {
return "p " + Arrays.toString(p) + " r " + Arrays.toString(r) + "\n";
}
// Tests
public static void main(String[] args) {
UnionFind uf = new UnionFind(5);
System.out.println("init /w 5 (should print 'p [0, 1, 2, 3, 4] r [0, 0, 0, 0, 0]'):");
System.out.println(uf);
uf.union(1, 2);
System.out.println("union 1 2 (should print 'p [0, 1, 1, 3, 4] r [0, 1, 0, 0, 0]'):");
System.out.println(uf);
uf.union(3, 4);
System.out.println("union 3 4 (should print 'p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0]'):");
System.out.println(uf);
uf.find(4);
System.out.println("find 4 (should print 'p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0]'):");
System.out.println(uf);
System.out.println("count (should print '3'):");
System.out.println(uf.count());
}
}
Variables All
No. | From | Name | Value |
---|---|---|---|
1 | 67 | args | [Ljava.lang.String;@7852e922 |
END | 0 | 0 | 0 |
Process Filter | Thread Filter |
---|---|
1827371 java | 1827386 java |
No. | PN | PID | TID | TN | Message |
---|---|---|---|---|---|
1 | java | 1827371 | 1827386 | java | init /w 5 (should print 'p [0, 1, 2, 3, 4] r [0, 0, 0, 0, 0]'): |
2 | java | 1827371 | 1827386 | java | p [0, 1, 2, 3, 4] r [0, 0, 0, 0, 0] |
3 | java | 1827371 | 1827386 | java | union 1 2 (should print 'p [0, 1, 1, 3, 4] r [0, 1, 0, 0, 0]'): |
4 | java | 1827371 | 1827386 | java | p [0, 1, 1, 3, 4] r [0, 1, 0, 0, 0] |
5 | java | 1827371 | 1827386 | java | union 3 4 (should print 'p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0]'): |
6 | java | 1827371 | 1827386 | java | p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0] |
7 | java | 1827371 | 1827386 | java | find 4 (should print 'p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0]'): |
8 | java | 1827371 | 1827386 | java | p [0, 1, 1, 3, 3] r [0, 1, 0, 1, 0] |
9 | java | 1827371 | 1827386 | java | count (should print '3'): |
END | 0 | 0 | 0 | 0 | 0 |
×
Functions and Shortcuts
No. | Function | Shortcuts | Description |
---|---|---|---|
1 | GB | Alt + LEFT, Alt + A | Go Backward |
2 | GF | Alt + RIGHT, Alt + D | Go Foreward |
3 | PPE | Alt + UP, Alt + W | Previous Process End |
4 | NPS | Alt + DOWN, Alt + S | Next Process Start |
5 | PB | Ctrl + LEFT, Ctrl + A | current Process Backward |
6 | PF | Ctrl + RIGHT, Ctrl + D | current Process Foreward |
7 | PPTE | Ctrl + UP, Ctrl + W | go to current Process's Previous Thread's End |
8 | PNTS | Ctrl + DOWN, Ctrl + S | go to current Process's Next Thread's Start |
9 | TB | LEFT, A | current Thread Backward |
10 | TF | RIGHT, D | current Thread Foreward |
11 | LU | UP, W | go Line Up of current code block in current thread |
12 | LD | DOWN, S | go Line Down of current code block in current thread |
13 | LP | Shift + UP, Shift + W | go to the occurrence of current line in Previous Loop |
14 | LD | Shift + DOWN, Shift + S | go to the occurrence of current line in Next Loop |
15 | BS | Home | go to code Block Start |
16 | BE | End | go to code Block End |
Project: | Alg-Java |
Update: | 20240824 |
Commit: | a7cd97d7 |
Source Code: | searches.UnionFind |
BuildTool: | Java17 |
Compiler: | Java17 |
Runtime: | Openjdk17 |
System: | MySystemD |
Kernel: | Linux5.10.211 |
Cpu: | Intel:Corei7-7700K |
Machine: | AwesomeMachine |