본문 바로가기
카테고리 없음

그래프 이론의 핵심 알고리즘: 크루스칼(Kruskal) 알고리즘

by xylavo 2025. 4. 14.

그래프 이론에서 최소 비용으로 모든 노드를 연결하는 방법을 찾는 것은 많은 실제 문제에서 핵심적인 과제입니다. 크루스칼 알고리즘은 이러한 문제를 효율적으로 해결하는 대표적인 방법으로, 네트워크 설계부터 클러스터링까지 다양한 분야에서 활용됩니다.

MST의 정의

최소 신장 트리(Minimum Spanning Tree, MST)란 그래프의 모든 정점을 포함하면서 사이클이 존재하지 않는 연결 부분 그래프 중에서 간선의 가중치 합이 최소인 트리를 말합니다. 쉽게 말해, MST는 그래프의 모든 정점을 가장 적은 비용으로 연결하는 트리 구조입니다.

MST가 갖는 주요 특성은 다음과 같습니다:

  • 정확히 (n-1)개의 간선을 가집니다(n은 정점의 개수).
  • 사이클을 포함하지 않습니다.
  • 모든 정점이 연결되어 있습니다.
  • 간선의 가중치 합이 최소입니다.

MST는 다양한 실생활 문제에 적용됩니다. 예를 들어, 여러 도시를 연결하는 도로 네트워크를 최소 비용으로 구축하거나, 통신망을 설계할 때 케이블 길이를 최소화하는 문제를 해결할 수 있습니다. 또한 클러스터링 알고리즘에서도 데이터 포인트 간의 관계를 정의하는 데 MST가 활용됩니다.

MST를 찾는 대표적인 알고리즘으로는 크루스칼(Kruskal) 알고리즘과 프림(Prim) 알고리즘이 있습니다. 이 중 크루스칼 알고리즘은 간선을 가중치 순으로 정렬한 후, 사이클을 형성하지 않는 간선을 하나씩 선택하여 MST를 구성하는 그리디(Greedy) 방식의 알고리즘입니다.

크루스칼의 구현과 간단한 증명

크루스칼 알고리즘은 구현이 직관적이고 효율적인 방법으로 MST를 찾아냅니다. 이 알고리즘의 핵심 아이디어는 "가장 가중치가 작은 간선부터 사이클 없이 선택"하는 것입니다.

알고리즘 구현 단계

  1. 그래프의 모든 간선을 가중치에 따라 오름차순으로 정렬합니다.
  2. 정렬된 간선 리스트에서 가장 가중치가 작은 간선부터 차례로 선택합니다.
  3. 선택한 간선이 사이클을 형성하지 않는 경우에만 MST에 추가합니다.
  4. (n-1)개의 간선이 선택될 때까지(또는 모든 정점이 연결될 때까지) 2~3단계를 반복합니다.

사이클 감지는 Union-Find(서로소 집합) 자료구조를 활용하여 효율적으로 구현할 수 있습니다. 각 정점을 독립된 집합으로 초기화한 후, 간선이 연결하는 두 정점이 같은 집합에 속하면 사이클이 형성된다고 판단합니다.

시간 복잡도

  • 간선 정렬: O(E log E) (E는 간선의 수)
  • Union-Find 연산: 거의 O(1) (경로 압축과 랭크 기법 사용 시)
  • 전체 알고리즘: O(E log E) 또는 O(E log V) (V는 정점의 수)

알고리즘의 정당성 증명

크루스칼 알고리즘이 최소 신장 트리를 찾는다는 사실은 그리디 알고리즘의 정당성으로 증명할 수 있습니다.

증명의 핵심은 '컷 속성(Cut Property)'입니다. 그래프의 정점들을 두 개의 분리된 집합으로 나누었을 때, 두 집합을 연결하는 간선 중 가중치가 가장 작은 간선은 어떤 MST에도 포함된다는 성질입니다.

크루스칼 알고리즘에서는 매 단계마다 가장 가중치가 작은 간선을 선택하면서 사이클을 형성하지 않는지 확인합니다. 이때 선택된 간선은 현재까지 만들어진 서로소 집합들 사이의 최소 가중치 간선이므로 컷 속성에 의해 MST에 반드시 포함됩니다. 따라서 최종적으로 얻어진 트리는 최소 신장 트리가 됩니다.

크루스칼을 사용하는 코딩테스트 문제

코딩테스트에서 크루스칼 알고리즘은 네트워크 구성, 도로 건설, 전력망 설계 등 다양한 문제 상황에서 응용됩니다. 대표적인 문제 유형과 접근법을 살펴보겠습니다.

1. 도시 연결 문제

여러 도시를 최소 비용으로 연결하는 도로 네트워크를 설계하는 문제입니다. 각 도시는 정점, 도로는 간선, 건설 비용은 가중치로 표현됩니다.

2. 네트워크 분할 문제

하나의 연결된 네트워크를 여러 개의 독립된 네트워크로 분할하는 문제에서도 크루스칼 알고리즘을 응용할 수 있습니다. MST를 구성한 후, 가장 비용이 큰 간선들을 제거하는 방식으로 접근합니다.

3. 우주신과의 교감 (백준 1774)

이 문제는 기존에 연결된 간선이 있는 상태에서 최소 비용으로 모든 정점을 연결하는 문제입니다. 크루스칼 알고리즘에 약간의 변형을 주어 해결할 수 있습니다.

4. 상호 베타적 집합 응용

크루스칼 알고리즘의 핵심인 Union-Find 자료구조는 집합 관리 문제에서도 자주 활용됩니다. 예를 들어, 친구 관계 네트워크나 네트워크 연결성 판단 문제에서 유용합니다.

코딩테스트에서 크루스칼 알고리즘 문제를 해결할 때는 다음 사항에 주의해야 합니다:

  • Union-Find 최적화(경로 압축, 랭크 기법)를 적용하여 시간 복잡도를 개선
  • 간선이 없는 경우나 모든 정점을 연결할 수 없는 경우의 예외 처리
  • 가중치가 음수인 경우의 처리 방법

마무리

크루스칼 알고리즘은 간단한 구현 방법과 효율적인 성능으로 최소 신장 트리 문제를 해결하는 강력한 도구입니다. 그래프 이론에 대한 이해와 Union-Find 자료구조의 활용 능력을 함께 테스트하는 문제가 많아, 코딩테스트 준비에 있어 필수적인 알고리즘이라 할 수 있습니다.