学习首页/数据结构/并查集交互演示 · JavaScript

代码与动画 DISJOINT SET UNION

并查集.

通过代表节点管理集合,使用按大小合并和路径压缩。

均摊 O(α(n))空间 O(n)固定元素 0–7

原理与执行逻辑

用父指针树表示不相交集合,根节点是集合代表。查找代表判断归属,合并根节点改变集合关系,并通过压缩路径与按大小合并控制树高。

执行步骤

  1. 每个元素初始化为自己的父节点。
  2. find 沿父指针到根,并把沿途节点直接连到根。
  3. union 先找两端代表,代表相同则无需合并。
  4. 将较小集合的根接到较大集合根下,更新大小;比较代表即可判断连通。

关键理解

父指针表示集合归属,不一定对应原图中的边。路径压缩只改变树形表示,不改变集合成员或连通结果。

简短示例

合并 1 与 2,再合并 2 与 3 后,三者代表相同;查找 3 可以缩短它到代表的路径,但仍属于同一集合。

代码与执行动画

STEP 0 / 0
并查集
const parent = [0, 0, 2, 2, 4, 5, 6, 7], size = [2, 1, 2, 1, 1, 1, 1, 1];
1 行 · 0 个片段标记
集合数 6
0root · size=21parent=02root · size=23parent=24root · size=15root · size=16root · size=17root · size=1
当前数据正在操作已访问 / 命中标记 / 指针
输出 / 辅助状态
parent = [0, 0, 2, 2, 4, 5, 6, 7]
0

当前结构

选择操作,观察对应代码和状态变化。

操作当前结构

操作结果会用于下一次操作;重置结构恢复初始数据。

实现说明

并查集的操作规则

箭头由元素指向父节点。根节点是集合代表;合并时小集合接到大集合,find 会将路径直接连接到根。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。