최소신장트리(MST)란?
신장 트리(Spanning tree): 그래프 내의 모든 정점을 포함하는 트리
- n개의 정점 가지는 그래프가 (n-1)개의 간선으로 연결되어 있는 트리 구조의상태
- 최소신장트리란 최소한의 비용으로 신장트리를 형성하는 것
- MST 특징 : 간선의 가중치의 합이 최소, n개의 정점을 가지는 그래프는 반드시 (n-1)개의 간선 사용, 사이클 X
- 사용 예시 : 도로건설, 파이프, 전화, 배관 등
참고 자료구조(그래프와 노드)
- 그래프 : 노드와 간선으로 표현, 사이클 가능, 루트노드 개념 없음, 부모-자식 개념 없음, 네트워크 모델
- 트리 : 노드로 이루어진 자료구조, 사이클 불가능 루트노드 반드시 한 개, 모든 자식노드는 한 개의 부모노드를 가짐, 계층 모델
종류
Kruskal MST 알고리즘
- 그래프의 간선들을 가중치의 오름차순으로 정렬(모든 간선을 비용을 기준으로 정렬하고, 비용이 작은 간선부터 선택)
- 정렬된 간선 리스트에서 순서대로 사이클을 형성하지 않는 간선을 선택(가장 낮은 가중치를 먼저 선택)
- 해당 간선을 현재의 MST(최소 비용 신장 트리)의 집합에 추가
- 예시문제: 프로그래머스 섬 연결하기
Prim's MST 알고리즘
- 시작 정점을 선택 후 최소 간선으로 연결된 노드를 연결하고 이 노드에서 신장트리 집합을 단계적으로 확장
- 임의의 노드를 선택 후 시작 정점을 MST 집합에 포함
- 선택된 정점에 가능한 간선 중 가장 작은 비용을 가진 연결된 정점을 선택하여 트리를 확장
(간선에 연결된 노드가 이미 연결된 집합에 있으면 패스(Cycle 방지)) - 선택한 간선 후보에서 제거
- 후보 간선이 없을 때까지 반복
- 예시문제: 프로그래머스 섬 연결하기
- 보다 나은 정보를 위해 틀린 내용, 혹은 추가할 내용, 혹은 관련 공개된 문제를 댓글로 달아주시면 감사하겠습니다.
- 내용은 업데이트될 예정입니다.
'알고리즘' 카테고리의 다른 글
버블정렬, 선택정렬, 삽입정렬, 힙정렬, 퀵정렬, 병합정렬 (0) | 2021.09.23 |
---|---|
[최단경로]플로이드 와샬, 다익스트라, 최소 신장트리(프림, 크루스칼) (0) | 2021.09.15 |
[알고리즘] DFS와 BFS (0) | 2021.04.23 |
[알고리즘]비트마스크(BitMask), 비트조작 - 파이썬 (0) | 2021.03.24 |