January 21, 2023

서로소 집합


def find_parent(parent_list, x):
    if (parent_list[x] != x):
        parent_list[x] = find_parent(parent_list, parent_list[x])
    return parent_list[x]

def union_parent(parent_list, a, b):
    a = find_parent(parent_list, a)
    b = find_parent(parent_list, b)

    if (a < b):
        parent_list[b] = a
    else:
        parent_list[a] = b

서로소 집합(Disjoint Set)이란 공통 원소가 없는 두 집합을 의미한다.

서로소 집합 자료구조

서로소 집합 자료구조 동작 과정

여러 개의 합치기 연산이 주어졌을 때 서로소 집합 자료구조의 동작과정은 다음과 같습니다.

  1. Union 연산을 확인하여, 서로 연결된 두 노드 A, B를 확인한다.
    1. A와 B의 루트 노드 A', B'을 각각 찾는다.
    2. A'을 B'의 부모 노드로 설정한다.
  2. 모든 Union 연산을 처리할 때까지 1번의 과정을 반복한다.

경로 압축

서로소 집합을 활용한 사이클 판별