[자료구조] Minimum Spanning Tree - Prim-Jarnik's Algorithm, Kruskal's Algorithm

 

Minimum Spanning Trees (MSTs)

지난 포스팅에서는 가중치 그래프(weighted graph)에서 최단 경로(shortest path)를 찾는 다익스트라 알고리즘(Dijkstra's algorithm)과 벨만-포드 알고리즘(Bellman-Ford algorithm)에 대해 알아보았다. 이번에는 가중치 그래프에서 또 다른 중요한 문제인 Minimum Spanning Tree (MST)에 대해 자세히 알아보겠다. MST는 그래프의 모든 정점을 연결하는 최소 비용의 트리 구조를 찾는 문제로, 네트워크 설계, 클러스터링, 이미지 분할 등 다양한 분야에서 활용된다.

1. MST란?

Spanning Subgraph

Spanning subgraph는 원래 그래프의 모든 vertex를 포함하는 부분 그래프다. 즉, 원래 그래프의 일부 간선을 제거하여 만든 그래프로, 모든 정점은 여전히 연결되어 있다.

Spanning Tree

Spanning tree는 spanning subgraph이면서 트리(cycle이 없는 연결된 그래프)인 그래프다. 즉, 그래프의 모든 정점을 연결하면서 사이클을 형성하지 않는 부분 그래프다.

Minimum Spanning Tree (MST)

Minimum Spanning Tree (MST)는 가중치 그래프에서 간선의 가중치 합이 최소인 spanning tree이다. MST는 여러 개 존재할 수 있으며, 통신 네트워크, 운송 네트워크 등 다양한 응용 분야에서 사용된다.

2. MST의 특징

2.1. Cycle Property

MST는 다음과 같은 Cycle Property를 만족한다.

MST T와 T에 포함되지 않는 간선 e가 있다고 가정하자. e를 T에 추가하면 사이클 C가 형성된다. 이때, C에 속하는 모든 간선 f에 대해 weight(f) ≤ weight(e)이다.

증명: 만약 weight(f) > weight(e)인 간선 f가 있다면, f를 e로 대체하여 더 작은 가중치를 갖는 spanning tree를 만들 수 있다. 이는 T가 MST라는 가정에 모순된다.

Cycle property

2.2. Partition Property

MST는 다음과 같은 Partition Property를 만족한다.

그래프 G의 정점들을 두 개의 집합 U와 V로 분할한다. 이때, U와 V를 연결하는 간선 중 가중치가 가장 작은 간선 e는 반드시 MST에 포함된다.

증명: MST T가 간선 e를 포함하지 않는다고 가정하자. e를 T에 추가하면 사이클 C가 형성된다. C에는 U와 V를 연결하는 다른 간선 f가 반드시 존재하며, cycle property에 의해 weight(f) ≤ weight(e)다. 따라서 f를 e로 대체하여 또 다른 MST를 얻을 수 있으며, 이는 e가 MST에 포함됨을 의미한다.

Partition property


3. MST 알고리즘

MST를 찾는 대표적인 알고리즘으로는 Prim-Jarnik 알고리즘Kruskal 알고리즘이 있다. 두 알고리즘 모두 탐욕 알고리즘(greedy algorithm)으로, 각 단계에서 최선의 선택을 하여 MST를 찾는다.

3.1. Prim-Jarnik's Algorithm

Prim-Jarnik 알고리즘은 Dijkstra's 알고리즘과 유사하게 작동한다. 임의의 정점 s에서 시작하여 MST를 점진적으로 확장해 나가는 방식이다.
(Dijkstra는 weight의 합이라면, Prim-Jarnik는 weight 값 그 자체로 설정)

  1. 시작 정점 s를 MST에 포함시키고, s에 인접한 정점들의 거리를 갱신
  2. MST에 포함되지 않은 정점 중 거리가 가장 짧은 정점 u를 MST에 추가
  3. 정점 u에 인접한 간선들을 이용하여 MST 외부에 있는 정점들의 거리를 갱신 (edge relaxation)
  4. 모든 정점이 MST에 포함될 때까지 2-3단계를 반복
Prim-Jarnik's algorithm example

3.2. Kruskal's Algorithm

Kruskal 알고리즘은 간선을 가중치 순으로 정렬하고, 사이클을 형성하지 않는 선에서 간선들을 차례로 MST에 추가하는 방식이다.

  1. 그래프의 모든 간선을 가중치 순으로 오름차순 정렬
  2. 가장 작은 가중치를 가진 간선부터 MST에 추가해도 사이클이 형성되지 않으면 MST에 추가
  3. 모든 간선을 처리할 때까지 2단계를 반복

Kruskal's algorithm example

마무리

이번 포스팅에서는 MST의 개념, 특징, 그리고 대표적인 알고리즘인 Prim-Jarnik 알고리즘과 Kruskal 알고리즘에 대해 알아보았다. MST는 네트워크, 인공지능 등에서 활용되는 중요한 개념이므로, 이번 포스팅에서 다룬 내용들을 잘 이해하고 기억하는 것이 중요하다. 1학기가 끝나가는 지금.. 이제 자료구조에서 배울 내용도 얼마 남지 않았다!

추천글 : 
[자료구조] 
Directed graph - Floyd-Warshall Transitive Closure, Topological sorting
(https://hyeonb.blogspot.com/2024/06/directed-graph-floyd-warshall.html)
[자료구조] Weighted graph & Dijkstra's algorithm
(
https://hyeonb.blogspot.com/2024/06/weighted-graph-dijkstras-algorithm.html)
hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2