实质:多叉树
功能:快速合并和查找
时间复杂度:Union - O(1) Find - O(1)
核心思想:连接根
底层数据结构:
父亲表示法——用一个Array/HashTable来记录每个节点的父亲是谁
father[A] = B
查询所在集合:
用所在集合最顶层的老大哥节点来代表这个集合
合并两个集合:
找到两个集合中最顶层的两个老大哥节点A和B
father[A] = B or father[B] = A
Python模板:
f = {} #初始化父亲表
for ele in list:
f[ele] = ele #最开始,所有的父亲节点都指向自己,也可以指向空
#路径压缩——在找到老大哥以后,还需要把一路上经过的点都指向老大哥。
def find(x,f):
j = x
while f[j] != j :
j = f[j]
while x != j:
fx = f[x]
f[x] = j
x = fx
return j
#集合合并——找到两个元素所在集合的老大哥A和B,将其中一个老大哥的父指针指向另一个老大哥
def merge(x,y,f):
fx = find(x,f)
fy = find(y,f)
if fx != fy:
f[fx] = fy
时间复杂度 O(log *n) 约等于O(1)