【算法】并查集—带路径压缩的按秩合并法

读了《算法导论》的21章:用于不相交集合的数据结构 后在这里对并查集算法做一个小结。
对于动态集合的表示有多种方法,例如链表和有根树。不论是哪种表示,我们都用一个代表来标识一个集合,这个代表就是该集合中的某个成员。
并查集算法用于对不相交集合的查找与合并,主要是以下三种操作:

  • MAKE_SET(X):创建一个新的集合,它包含唯一的成员x(因而为代表)。
  • UNION(x,y):将分别包含x和y的两个不相交的集合合并为一个新的集合。
  • FIND_SET(x):查找x所在的集合,并返回该集合的代表。

《算法导论》介绍了两种实现并查集的方法:链表法和带路径压缩的按秩合并。由于链表法的链表结构相对复杂,个人感觉没有按秩合并简单,所以这里只介绍带路径压缩的按秩合并法。
带路径压缩的按秩合并法使用有根树来表示集合,树中的每个结点包含一个成员,每个结点仅指向它的父结点,每棵树的根结点包含集合的代表,并且指向自身。如下图a为合并前的两个集合,图b为合并后的集合。
这里写图片描述
所以我们有以下三种操作:
MAKE_SET创建一个只有一个结点的树。
UNION将其中一棵树的根结点指向另一棵树的根。
FIND_SET返回结点所在树的根结点。

为了优化该算法我们还要在引入两种启发性策略:

  1. 按秩合并:由于我们
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值