【数据结构——并查集】

引入

并查集(Disjoint Set Union,DSU)是一种用于管理元素分组的数据结构。

合并(Union):将两个不相交的集合合并为一个集合。

查找(Find):确定某个元素属于哪个集合,通常通过返回集合的"代表元素"(groupID或父节点)实现。

quickFind 和 quickUnion 是并查集的两种实现方式。

每个元素初始时是一个独立的集合,其groupID是本身下标或父节点指向自己(分别表明各自属于哪个集合)。

如下:

主要就是对两个数组所存的内容进行操作,特别是代表元素部分。

对代表元素进行操作的方向(思考角度)不同,就会使用不同的解决方案(如选择quickFind还是quickUnion,)

quickFind

每个元素直接指向其所属集合的代表元(根节点),合并操作时需要遍历整个数组更新所有相关元素。

时间复杂度:

查找(Find):O(1),直接访问数组即可确定所属集合。

合并(Union):O(n),需要遍历数组更新所有属于同一集合的元素。

特点:查找速度快,但合并效率低(找快合慢)。

quickUnion

使用树结构表示集合(看下图只能体现链,后面的内容会讲到路径压缩:通过增大节点的度来提高效率进而体现出树的特点),每个元素指向其父节点,根节点指向自身(下图中未标)。合并时只需将一个树的根指向另一个树的根就能连接两个集合。

时间复杂度:

查找(Find):O(logn)(平均,取决于树高),需要递归或迭代找到根节点。

合并(Union):O(logn),仅需修改根节点的指向。

特点:合并效率高,但查找速度取决于树高。

往常的树结构都是从根节点开始,依次向下指向子结点。而这里是子节点指向父节点,父节点是自己时就指向自己,这种节点被称为根节点(如1和5)。

quickUnion查找速度取决于树高,可通过路径压缩等进一步提升性能:

路径压缩就是想办法把树变矮,像上面的例子:从1到4这串右子树,如果从根节点开始往下遍历,将每个节点的parent都直接指向根节点1,当根节点查找目标节点时仅需访问1层。

大致思路捋顺之后就开始敲了~

//////////////下集预告//////////////

头文件

功能实现

功能调用

相关推荐
仟濹7 分钟前
【算法打卡day20(2026-03-12 周四)算法/技巧:哈希表,双指针,字符串交换处理】5个题
数据结构·算法·散列表
陌夏7 分钟前
双指针与滑动窗口
算法
MicroTech202516 分钟前
MLGO微算法科技,推出革命性量子算法ANQITE,推动量子计算新时代
科技·算法·量子计算
样例过了就是过了38 分钟前
LeetCode热题100 子集
数据结构·c++·算法·leetcode·dfs
I_LPL43 分钟前
day52 代码随想录算法训练营 图论专题5
java·算法·图论·并查集
jing-ya1 小时前
day 49 图论part1
算法·深度优先·图论
想吃火锅10051 小时前
【leetcode】98.验证二叉搜索树
算法·leetcode·职场和发展
一叶落4381 小时前
【LeetCode 172】阶乘后的零(C语言详解 | 数学规律 + 对数时间复杂度)
c语言·数据结构·算法·leetcode·动态规划
自信150413057591 小时前
数据结构初阶——二叉树之——堆的实现
c语言·数据结构·算法
Barkamin1 小时前
(有头)链表的实现(Java)
java·数据结构·链表