Union-Find并查集算法(Python实现)

这是并查集算法的Python实现:


class UF:
'''
并查集算法
'''

def __init__(self, n) -> None:
'''
初始化数据结构
'''
# 初始化连通分量数量
self._count = n
# 初始化双亲节点
self._parent = [i for i in range(n)]
# self.size[x]表示以x为根节点的节点数量
self._size = [1 for i in range(n)]
pass

def find(self, x : int):
'''
find root of x
'''
while self._parent[x] != x:
# 路经压缩,将当前节点的双亲节点设为其双亲节点的双亲节点
self._parent[x] = self._parent[self._parent[x]]
x = self._parent[x]
return x

def union(self, p: int, q: int):
'''
union p and q
'''
# 找到p和q的根节点
rootP = self.find(p)
rootQ = self.find(q)
if rootP == rootQ:
# 如果根节点相等,则pq本就联通
return
# 将小集合合并到大集合中,平衡性优化
if self._size[rootP] > self._size[rootQ]:

self._parent[rootQ] = rootP
self._size[rootP] += self._size[rootQ]
else:
self._parent[rootP] = rootQ
self._size[rootQ] += self._size[rootP]
self._count -= 1

def count(self):
'''
返回联通数
'''
return self._count

def connected(self, p, q):
'''
判断pq是否联通
'''
return self.find(q) == self.find(p)

参考:https://zhuanlan.zhihu.com/p/98406740

文章作者: Met Guo
文章链接: https://guoyujian.github.io/2023/12/24/Union-Find%E5%B9%B6%E6%9F%A5%E9%9B%86%E7%AE%97%E6%B3%95%EF%BC%88Python%E5%AE%9E%E7%8E%B0%EF%BC%89/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gmet's Blog