Skip to content

并查集 Union-Find

高效追踪连通分量 — 就像通过朋友关系分组


概念

现实类比

** 社交网络**:两个人成为朋友后,他们的朋友圈合并。并查集追踪每个人属于哪个组,快速回答"这两个人是否相连?"

核心操作

操作说明时间
find(x)查找 x 的根O(α(n))
union(x, y)合并 x 和 y 所在的集合O(α(n))
connected(x, y)检查 x 和 y 是否在同一集合O(α(n))

优化

  1. 路径压缩find 时让所有节点直接指向根
  2. 按秩合并:矮树挂到高树下

面试题

省份数量

LeetCode 547:计算朋友圈(连通分量)数量


决策指南

场景推荐
动态连通性追踪并查集
需要合并集合并查询并查集
小型静态数据集数组或 Set 即可

MIT Licensed | 用 ❤️ 为 JS 初学者制作