不相交集合的操作
MAKE-SET(x):建立一个集合,它的唯一成员(因而为代表)是x。因为各个集合是不相交的,所以x不会出现在别的某个集合中
UNION(x,y):将包含x和y的两个集合合并。假定操作之前着两个集合是不相交的。
FIND-SET(x):返回一个指针,这个指针指向包含x的(唯一)集合的代表。
不相交集合的链表表示

不相交森林集合
- 按秩合并:秩表示该节点高度的一个上界,总是秩小的树接到秩大的树
- 路径压缩:
秩:x.rank,代表x的高度
MAKE-SET(x)
x.p = x
x.rank = 0
//按秩合并
UNION(x,y)
LINK(FIND-SET(x),FIND-SET(y))
LINK(x,y)
if x.rank > y.rank
y.p = x
else
x.p = y
if x.rank == y.rank
y.rank = y.rank + 1
//带有路径压缩的FIND-SET
FIND-SET(x)
if x != x.p
x.p = FIND-SET(x.p)
return x.p
FIND-SET过程是一个两趟方法,递归时,第一趟沿着查找路径向上找到根,递归回溯时,第二趟沿着搜索树向下更新节点,使其直接指向根