更新紀錄:
2022.03.01 更新網路資料 2 的連結
網路資料:
觀念紀錄:
Union-Find 是一種 data structure 也可以是一種類型的問題。
問題的主要描述是:
- Find(x, y): 回傳 x, y 是否屬於同一個 set
- Union(x, y): 合併 x, y 所屬的 set
之所以會說是一種 data structure 是因為,實務上高效率解決這類問題的作法是一種特定的資料結構。
Python 程式碼:
class UnionFind:
def __init__(self, n):
self.id = [i for i in range(n)]
self.sz = [1 for _ in range(n)]
def root(self, i):
while i != self.id[i]:
self.id[i] = self.id[self.id[i]]
i = self.id[i];
return i
def find(self, p, q):
return self.root(p) == self.root(q)
def unite(self, p, q):
i = self.root(p)
j = self.root(q)
if self.sz[i] <= self.sz[j]:
self.id[i] = j
self.sz[j] += self.sz[i]
else:
self.id[j] = i
self.sz[i] += self.sz[j]