UNION-FIND 알고리즘이란?

서로소 집합 이란 공통 원소가 없는 두 집합을 의미합니다. 예를 들어 집합 {1, 2}와 {3, 4}는 서로소 관계입니다.

서로소 집합 자료 구조란 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 라고 할 수 있는데,

이러한 서로소 집합 자료구조는 union과 find 2개의 연산으로 조작할 수 있습니다.

union 연산은 합집합 연산으로 2개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산이고, find 연산은 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산입니다.

union-find 알고리즘은 기본적으로 다음과 같은 순서로 동작합니다.

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

실제 구현할 때에는 A'와 B' 중 더 번호가 작은 원소가 부모 노드가 되도록 구현하는 경우가 많기 때문에, 이러한 방법으로 구현해보겠습니다. 예를 들어 A'가 1이고, B'가 3이면 B'가 A'를 가리키도록 설정할 것입니다. 즉, B'의 부모 노드를 A'로 설정하겠다는 뜻입니다.

SWIFT로 UNION-FIND 구현하기

구체적인 예시를 통해 이해하기

다음과 같이 4개의 union 연산이 주어졌습니다.