您的位置:首页 > 理论基础 > 数据结构算法

用于不相交集合的数据结构

2017-01-03 09:51 260 查看

不相交集合的操作

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过程是一个两趟方法,递归时,第一趟沿着查找路径向上找到根,递归回溯时,第二趟沿着搜索树向下更新节点,使其直接指向根
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: