서로소 집합

서로소 집합 자료구조
여러 개의 합치기 연산이 주어졌을 때 서로소 집합 자료구조의 동작 과정
1. 합집합 연산을 확인하여 서로 연결된 두 노드 A, B 확인
- 1) A와 B의 루트 노드 A', B'를 각각 찾음
- 2) A'를 B'의 부모 노드로 설정
2. 모든 합집합 연산을 처리할 때까지 1번 반복






특징

코드 구현
# 특정 원소가 속한 집합 찾기
def find_parent(parent, x):
# 루트 노드를 찾을 때까지 재귀 호출
if parent[x] != x: # 부모가 자기 자신이 아니라면 루트 노드가 아님
return find_parent(parent, parent[x]) # 부모 노드 번호를 넣어서 다시 호출
return x
# 두 원소가 속한 집합을 합치기
def union_parent(parent, a, b): # 루트 번호를 찾은 뒤 번호 확인
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b: # 더 번호가 큰 쪽이 작은 쪽을 부모로 설정
parent[b] = a
else:
parent[a] = b
문제점

찾기 함수 최적화를 위한 경로 압축 방법 사용 가능
# 특정 원소가 속한 집합 찾기
def find_parent(parent, x):
# 루트 노드를 찾을 때까지 재귀 호출
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return x
