Union-Find 算法是一种用于处理图中连通性问题的算法。它的核心思想是将图中的每个节点看作一个集合,每个集合的代表元素就是这个集合的根节点。Union-Find 算法提供了两个操作:
find(x)
:返回节点 x 所在集合的根节点union(x, y)
:将节点 x 和节点 y 所在的两个集合合并
通过这两个操作,我们可以快速地查询两个节点是否在同一个集合中,也可以快速地将两个节点所在的集合合并起来。
下面是一个使用 Python 实现的 Union-Find 算法的例子:
class UnionFind:
def __init__(self, n):
# 初始化,将每个节点的根节点都设为自己
self.parent = [i for i in range(n)]
def find(self, x):
# 寻找节点 x 的根节点
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
# 将节点 x 和节点 y 所在的集合合并
root_x = self.find(x)
root_y = self.find(y)
if root_x != root_y:
self.parent[root_x] = root_y