Disjoint Set을 표현할 때 사용하는 알고리즘으로 트리 구조를 활용하는 알고리즘
간단하게 노드들 중에 연결된 노드를 찾거나, 노드들을 서로 연결할 때 사용한다
Disjoint Set 이란
func union(_ x: String, _ y: String) {
let parentX = find(x)
let parentY = find(y)
if parentX != parentY {
parent[parentY] = parentX
}
}
union(a,b)의 의미 : find(a)(= a의 부모노드)와 find(b)(= b의 부모노드) 를 비교하여 만약 다르다면 b의 부모노드를 a의 부모노드와 같게 한다.
func find(_ x: String) -> String {
if parent[x] == x {
return x
} else {
let topParent = find(parent[x]!)
parent[x] = topParent
return parent[x]!
find(a)의 의미 : 자신이 가리키고 있는 부모를 재귀적으로 찾아 실질적인 부모노드를 가져온 뒤 자신의 부모로 삼음