티스토리 뷰

728x90
반응형

네트워크, 전기 회로, 통신망 등 다양한 곳에서 효율적인 연결 구조를 찾는 건 매우 중요한 문제 입니다. 이럴 때 등장하는 것이 바로 '최소 신장 트리 (MST, Minimum Spanning Tree)' 입니다. 이 개념을 해결하기 위해 대표적으로 쓰이는 두 알고리즘이 바로 크루스칼(Kruskal) 알고리즘과 프림(Prim) 알고리즘인데요, 오늘은 이 둘의 개념부터 차이점, 그리고 실제 적용 방식까지 자세히 정리해 보겠습니다. 


🔍 최소 신장 트리(MST)란? 

최소 신장트리란, 그래프 내 모든 정점을 사이클 없이 최소한의 간선으로 모두 연결하면서 간선들의 가중치 합이 최소가 되도록 하는 트리를 말합니다. 예를 들어 통신 회선을 구축할 때, 불필요한 회선을 줄이면서도 모든 기기가 연결되게 만들고 싶을 때 사용되죠.


1️⃣ 크루스칼 알고리즘이란?

크루스칼 알고리즘은 “간선을 중심으로” 접근합니다. 전체 그래프에서 가중치가 가장 낮은 간선부터 선택하면서, 사이클이 발생하지 않도록 연결하는 방식입니다. 이를 위해 주로 유니온 파인드(Disjoint Set) 구조를 활용해 사이클 여부를 판별합니다.

✅ 동작 과정 요약

  1. 모든 간선을 가중치 기준으로 오름차순 정렬
  2. 간선을 하나씩 선택하면서 두 정점이 아직 연결되지 않은 경우에만 선택
  3. 사이클이 생기지 않도록 주의하며 선택
  4. 정점 수 - 1개의 간선을 선택하면 종료

📦 장점

  • 간선 중심이기 때문에 간선 수가 적은 희소 그래프에서 유리
  • 구현이 직관적이고, 정렬과 유니온-파인드가 핵심

2️⃣ 프림 알고리즘이란?

프림 알고리즘은 “정점을 중심으로” 확장해 나가는 방식입니다. 하나의 정점에서 시작해서, 연결된 정점 중에서 가중치가 가장 낮은 간선을 선택하며 점차 확장해 나가는 방식이죠. **우선순위 큐(Priority Queue, 힙)**를 이용해 가장 작은 가중치의 간선을 빠르게 선택합니다.

✅ 동작 과정 요약

  1. 임의의 정점에서 시작
  2. 현재 트리에 연결된 간선 중 가장 작은 가중치를 선택
  3. 아직 트리에 포함되지 않은 정점을 연결
  4. 모든 정점이 트리에 포함될 때까지 반복

📦 장점

  • 간선이 많고 정점이 많은 조밀한 그래프에 적합
  • 시작점부터 연결을 확장하는 방식이므로 구현이 조금 복잡할 수 있음

⚔️ 크루스칼 vs 프림 – 핵심 차이점 정리

  항목                                         크루스칼 알고리즘                                            프림 알고리즘
중심 요소 간선(edge) 중심 정점(vertex) 중심
그래프 유형 희소 그래프에 유리 조밀 그래프에 유리
자료구조 유니온-파인드 힙(우선순위 큐)
정렬 여부 간선 정렬 필요 정렬 없이 우선 연결
시작점 특정 시작점 불필요 시작 정점 필요
 

💡 실제로는 언제 써야 할까?

  • 네트워크 노드를 몇 개만 연결해야 하는 상황에서는 크루스칼이 더 직관적이고 효율적입니다.
  • 반대로, 정점 수가 많고 모든 지점이 연결되어야 하는 환경이라면 프림이 더 좋은 선택이 될 수 있습니다.

특히, 대규모 인프라 설계나 소셜 네트워크 분석, 게임에서의 맵 생성 등 다양한 분야에서 이 두 알고리즘은 각각의 특징에 따라 활용됩니다.

🧩 마무리 생각

크루스칼과 프림 알고리즘은 둘 다 동일 한 목적(MST)을 가지고 있지만, 접근 방식이 완전히 다릅니다. 현실에서는 두 알고리즘을 모두 익혀두고, 그래프의 특성에 따라 유연하게 선택하는 능력이 중요합니다. 이번 글을 통해 이 두 알고리즘의 구조적 차이를 이해하고, 문제에 따라 적절하게 선택하는 기준을 잡으셨다면 큰 의미가 있을 것입니다.

일상 생활에서도  슈퍼마켓 재고 관리, 택배 서비스, 음식 배달 서비스,네비게이션 등등 우리 곳곳에 알고리즘은 함께하고 있습니다.



728x90
반응형