Union-Find 算法
Union-Find 算法(并查集算法)⼀、问题介绍简单说,动态连通性其实可以抽象成给⼀幅图连线。⽐如下⾯这幅图,总共
有 10 个节点,他们互不相连,分别⽤ 0~9 标记:
现在我们的 Union-Find 算法主要需要实现这两个 API:
12345678class UF { /* 将 p 和 q 连接 */ public void union(int p, int q); /* 判断 p 和 q 是否连通 */ public boolean connected(int p, int q); /* 返回图中有多少个连通分量 */ public int count(); }
这⾥所说的「连通」是⼀种等价关系,也就是说具有如下三个性质:
1、⾃反性:节点 p 和 p 是连通的。
2、对称性:如果节点 p 和 q 连通,那么 q 和 p 也连通。
3、传递性:如果节点 p 和 q 连通, q 和 r 连通,那么 p 和 r 也连通。
⽐如说之前那幅图,0〜9 任意两个不同的点都不连通,调⽤ connected 都
会 ...