Quick-Find

Quick-Find


 1/**
 2 * @author wangy
 3 * @version 1.0
 4 * @date 2023/5/22 / 08:42
 5 */
 6
 7public class QuickFind {
 8
 9    public static void main(String[] args) {
10        QuickFindUF uf = new QuickFindUF(10);
11        uf.union(4, 3);
12        uf.union(3, 8);
13        uf.union(6, 5);
14        uf.print();
15        StdOut.println(uf.find(4,8));
16        StdOut.println(uf.find(3,9));
17        uf.union(9,4);
18        uf.union(2,1);
19        uf.union(5,0);
20        uf.print();
21        uf.union(7,2);
22        uf.union(6,1);
23        uf.union(7,3);
24        uf.print();
25    }
26
27}
28
29class QuickFindUF {
30
31    private int[] id;
32
33    // set id of each object to itself
34    // N array access
35    public QuickFindUF(int N) {
36        id = new int[N];
37        for (int i = 0; i < N; i++) {
38            id[i] = i;
39        }
40    }
41
42    // check p and q are in the same component
43    // 2 array access
44    public boolean find(int p, int q) {
45        return id[p] == id[q];
46    }
47
48    // change all entries of id[p] to id[q]
49    // at most 2N +2 array access
50    public void union(int p, int q) {
51        int pid = id[p];
52        int qid = id[q];
53        for (int i = 0; i < id.length; i++) {
54            if (id[i] == pid) {
55                id[i] = qid;
56            }
57        }
58    }
59
60    public void print() {
61        StdOut.println(Arrays.toString(id));
62    }
63
64}