유니온 파인드(Union-Find) 알고리즘?

 

서로소 집합(Disjoint Set) 자료구조라고도 불리며,
주로 그래프에서 사이클을 판별하거나, 자료들의 연결 정보를 알고 싶을 때 사용

 

핵심

연산 설명
Find(x) 원소 x가 속한 집합의 대표(root)를 찾는다.
Union(a, b) 원소 a가 속한 집합과 b가 속한 집합을 합친다.

 

 

작동원리

1. 초기화 : 각 노드가 자기 자신을 부모로 갖는다.
2. Find 함수 : 루트 노드(대표)를 찾는다
3. Union 함수 : 두 집합을 하나로 합친다

 

# 유니온 파인드 기본 구조 예제

# 1. 초기화: 각 노드가 자기 자신을 부모로 갖는다.
parent = [0, 1, 2, 3, 4, 5]  # 1~5번 노드 예시

# 2. Find 함수 — 루트 노드(대표)를 찾는다.
def find_parent(parent, x):
    if parent[x] != x:               # 부모가 자기 자신이 아니면
        parent[x] = find_parent(parent, parent[x])  # 재귀로 루트를 찾고 경로 압축
    return parent[x]

# 3. Union 함수 — 두 집합을 하나로 합친다.
def union_parent(parent, a, b):
    a = find_parent(parent, a)  # a의 루트 찾기
    b = find_parent(parent, b)  # b의 루트 찾기
    if a < b:
        parent[b] = a           # 작은 번호를 부모로
    else:
        parent[a] = b

# 4. 사용 예시
union_parent(parent, 1, 2)  # 1과 2 합치기
union_parent(parent, 2, 3)  # 2와 3 합치기

# 5. 결과 확인
print(find_parent(parent, 3))  # → 1 (3의 대표)
print(parent)  # 전체 부모 배열 출력 [0, 1, 1, 1, 4, 5]

'Etc > study' 카테고리의 다른 글

[5주차] 그리디 알고리즘  (0) 2025.10.22
[4주차] 다익스트라 알고리즘  (0) 2025.10.19
[4주차] 세그먼트 트리  (0) 2025.10.16
[3주차] 비선형 자료구조  (0) 2025.10.06
[2주차] 정렬 알고리즘  (0) 2025.09.30

+ Recent posts