并查集(Disjoint Set Union, DSU),也常被称为 Union-Find,是一种精巧的树形数据结构。它的主要任务是高效地处理一系列不相交集合(Disjoint Sets)的合并(Union)与查询(Find)操作。
想象一下,你有一群人,最初每个人自成一个圈子。并查集可以帮你快速完成两件事:
它在图论(如 Kruskal 算法)、网络连接、等价关系判断等领域有广泛应用。
并查集通常用一个数组(我们称之为 `parent` 数组)来模拟森林(多棵树)。数组的索引代表元素,数组的值代表该元素的“父节点”。
下图展示了一个包含两个集合 {1, 2, 5} 和 {3, 4} 的例子,其中 1 和 3 分别是根节点:
(假设索引从1开始,数组为 parent = [?, 1, 1, 3, 3, 2]
)
并查集凭借其近乎常数时间的查询和合并效率(在使用优化后),在多种场景下大放异彩:
掌握并查集是解决许多复杂问题的关键一步!
并查集的核心在于高效地维护集合关系。其基础操作虽然简单,但通过两种关键优化技术——**路径压缩**和**按秩合并**——可以将平均操作时间复杂度降低到近乎 O(1)。
点击下方的按钮打开详细说明和 C++ 代码示例。
基础的并查集已经非常强大,但它还有一些有趣的变体和更深入的应用:
点击下方按钮,了解更多关于并查集的前沿知识和相关资源。
感谢学习!希望这个可视化工具对您有所帮助。