1. 并查集是什么
并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以进行合并操作,但是无法进行分割操作。
主要操作:
- 查询元素a和元素b是否属于同一组。
- 合并元素a和元素b所在的组。
2.并查集的实现方式
- 快速FIND实现(Quick FIND)
- 快速UNION实现(Quick UNION)
3.并查集实现
3.1.Quick FIND
使用普通数组来实现,FIND操作只需O(1)时间,这是因为数组可以在常数时间内找到任意元素的集合名。然而在执行UNION(p,q)时,需要扫面整个数组,
并将p所在集合的所有元素移动到q所在集合中,这需要花费O(n)的时间。
Java版本实现
package tree;
public class UnionFind1 implements UF{
private int[] id;
public UnionFind1(int size) {
id = new int[size];
for(int i = 0 ; i < id.length ; i ++)
id[i] = i;
}
//查看元素对应的集合编号
private int find(int i) {
if(i < 0 || i > id.length)
throw new IllegalArgumentException("索引越界");
return id[i];
}
//查看元素p和元素q是否属于同一个集合
public boolean isConnected(int p , int q) {
return id[p] == id[q];
}
//合并元素p和元素q所属集合
public void union(int p , int q ){
int pID = find(p);
int qID = find(q);
if(qID == pID)
return;
for(int i = 0 ; i < id.length ; i ++ )
if(id[i] == pID)
id[i] = qID;
}
public int getSize() {
return id.lengt