并查集 Rank 的优化
并查集是一种数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作:查找(Find)和合并(Union)。查找操作用于确定某个元素属于哪个子集,而合并操作用于将两个子集合并成一个集合。在并查集中,每个子集用一棵树来表示,树根的元素作为该子集的代表。
并查集的基本操作
初始化
每个元素最初都是一个单独的集合,即自己是自己集合的代表。
查找(Find)
查找操作用于确定某个元素所在的集合。在树形表示中,这涉及到跟踪元素直到找到其根节点。
合并(Union)
合并操作将两个元素所在的集合合并为一个集合。通常,这涉及到将一个集合的根节点连接到另一个集合的根节点。
Rank 优化
在标准的并查集实现中,合并操作可能使树变得不平衡,导致查找操作的性能下降。为了优化这一性能,可以使用Rank优化。Rank是一个简单的概念,它为每个集合的根节点分配一个秩,表示该集合的深度或高度。
原理
- 每个集合的根节点的Rank初始化为0。
- 当执行合并操作时,比较两个根节点的Rank。
- 将Rank较小的根节点连接到Rank较大的根节点上。
- 如果两个根节点的Rank相同,则选择其中一个作为新的根节点,并将其Rank加1。
代码实现
class UnionFind:def __init__(self, size):self.parent = [i for i in range(size)]self.