본문 바로가기
Algorithm/알고리즘

분리 집합 (Disjoint Set) : Union-Find 알고리즘

by 애기 개발자 2023. 9. 5.
반응형

https://www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작

www.acmicpc.net

 

위 문제를 풀다가 몰라서 정리하고 간다.

 

Union-Find 알고리즘은 분리 집합(Disjoint-set) 자료구조를 구현하는 데 사용된다.

 

Union: 두 개의 집합을 하나로 합치는 연산. 두 집합을 합치기 위해 루트를 찾아서 하나의 집합으로 만듦.

Find: 주어진 원소가 주어진 집합의 루트를 찾는 연산. 이 연산을 통해 두 원소가 같은 집합에 속해 있는지 확인 가능 (두 집합의 루트를 비교하여 확인)

 

#두 개의 집합이 같은 집합인지 확인, 아닐경우 하나로 합침
def union(x, y):
    x = find(x)
    y = find(y) #주어진 x, y의 루트를 찾아서
    if x == y: #루트가 같다면 동일한 집합
        return
    parent[x] = y #아니라면 같은 집합으로 합쳐주기
    #x의 부모는 y
    return
#주어진 집합의 루트를 찾음
def find(x):
    if parent[x] == x: #주어진 값이 루트면 리턴
        return x
    parent[x] = find(parent[x]) #아니면 부모를 찾아 재귀
    return parent[x]

 

반응형

'Algorithm > 알고리즘' 카테고리의 다른 글

위상 정렬 알고리즘  (1) 2024.02.26

댓글