알고리즘
최소 스패닝(신장) 트리 (Minimum Spanning Tree)
문군_
2025. 2. 14. 15:09
Spanning Tree
그래프 내의 모든 정점을 포함하는 트리
💡 최소 신장 트리는 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다.
특징
- 사이클이 만들어지지 않아야 한다.
- 사이클이 만들어진 경우는 불필요한 연결이 존재한다는 뜻이기 때문
- 전체 노드(n) -1 개의 간선으로 구성된다.
- 하나의 그래프에 여러 개의 최소 신장 트리가 존재할 수 있다.
최소 신장 트리의 대표적인 알고리즘으로는 크루스칼(Kruskal) 알고리즘과 프림(Prim) 알고리즘이 존재한다.
크루스칼 알고리즘 (Kruskal Algorithm)
동작 원리
- 선택하지 않은 간선들 중 최소 가중치인 간선을 선택
- 사이클이 없는 경우에만 트리에 추가
- 총 v-1 (정점 개수 -1)개의 간선이 선택될 때까지 반복
구성한 스패닝 트리에 사이클 발생 여부를 판단하기 위해, 분리 집합 (Disjoint Set)을 사용한다.
→ Union-Find 알고리즘 사용
→ 어떤 간선을 선택했을 때, 그 간선의 두 정점이 같은 최상위 부모를 가지면 사이클이 발생함을 알 수 있다.