形式陈述
并查集维护一个动态划分,支持 make-set(x)、find(x) 返回所在块代表元、union(x,y) 合并两块。森林实现让每个集合是一棵根树;按秩或大小合并把浅树挂到深树,路径压缩在查找时把经过节点直接连到根。对
直觉
每个等价类选一个根作代表。合并只需连接两个根,查找则沿父指针到根;路径压缩让以后访问几乎直接到达。
例子与边界
Kruskal 中若 find(u)!=find(v),加入边并合并两分量;否则该边会成环。代表元本身没有持久语义,合并后可能改变,应用不应把根编号当作集合身份。路径压缩会修改结构,因此严格持久化或并行版本需额外设计。
推论与应用
并查集用于动态图连通、最小生成树、图像分割、等价约束和离线查询,是摊还分析最典型的数据结构之一。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。