Lazy loaded image
learn-data-structures
并查集
字数 644阅读时长≈ 2 分钟
2026-10-20
2026-10-21

一、基础

初始化:最开始,每个元素各自为战,没有从属关系,因此将其所属(父结点)标为自己。
查询:用递归的方法来实现对代表元素的查询,逐层访问父结点,直至根结点。判断两个元素是否同属一个集合,只需判断二者根结点是否相同。
合并:先找到两个集合的根,然后将前者的父结点设为后者即可,反之亦然。

二、路径压缩

如果每一次都合并都针对子结点,那么每次想找到这个子结点的根都需要遍历其所有的父辈,此时遍历的就是一条长长的链表,因此需要进行路径压缩。
路径压缩:把沿途每个结点的父结点都设为根结点。
查询:路径压缩版
一行版:

三、按秩合并

假设将一棵树的根与一个单独结点进行合并,那么有两种合并方式:
  1. 将单独结点作为根的子结点;
  1. 将单独结点作为根的父结点;
由于第二种方式会使得合并后树的深度变大,所有这种方式有缺陷,故应选择第一种方式。
按秩合并:用一个 rank 数组记录每个结点作为根结点所对应树的深度,一开始所有元素的秩设为 1 ,合并时将秩小的结点作为秩大的结点的子结点。
路径压缩与按秩合并一起使用可使时间复杂度接近 ,但可能会破坏秩的准确性,因此建议使用路径压缩版本。
初始化:按秩合并
合并:按秩合并

参考文献

原创存证 · 本地哈希 · af09569bacae...
算法:SHA-256
时间:2026-10-21
哈希:af09569bacae1372a9860b28647b097f7b8ccfbca7a4ddea2c940beb5ca428cf

该信息用于辅助证明当前内容版本,不等同于法律公证或版权登记。

上一篇
排序
下一篇
图

评论
Loading...