목표
- Spanning Tree, Minimum Spanning Tree(MST)에 대한 개념과 만드는 방법을 알 수 있습니다.
수준
Spanning Tree
💡 그래프 내의 모든 정점을 포함하는 트리
- Spanning Tree = 신장 트리
- 신장 : span을 그대로 번역한 한것으로, 한 노드에서 다른 모든 노드로 갈 수 있다는 의미로 보임
- Tree : 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프
- Graph : 꼭짓점과 변으로 이루어지는 구조
💡 Spanning Tree는 그래프의 최소 연결 부분 그래프이다.
- 최소연결 = 간선의 수가 가장 적다.
- n개의 정점을 가지는 그래프의 최소 간선의 수는 (n-1)이고, (n-1)개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 되고 이것이 바로 Spanning Tree가 된다.
특징
- DFS, BFS를 이용하여 그래프에서 신장트리를 찾을 수 있다.
- 탐색 도중에 사용된 간선만 모으면 만들 수 있다.
- 하나의 그래프에 많은 신장 트리가 존재할 수 있다.
- Spanning Tree는 트리의 특수한 현태이므로 모든 정점들이 연결되어 있어야 하고, 사이클을 포함해서는 안된다.
- Spanning Tree는 그래프에 있는 n개의 정점을 정확히 (n-1)개의 간선으로 연결 한다.
사례
- 회사 내의 모든 전화기를 가장 적은 수의 케이블을 사용하여 연결하고자 하는 경우
- n개의 위치를 연결하는 통신 네트워크를 최소의 링크를 이용하여 구축하고자 하는 경우
MST
Minimum Spanning Tree : 최소 신장 트리
💡 Spanning Tree 중에서 사용된 간선들의 가중치 합이 최소인 Tree를 MST라고 한다.
- MST는 간선에 가중치를 고려해서 최소 비용의 Spanning Tree를 선택하는 것을 말한다.
특징
- Spanning Tree의 특징을 그대로 가진다.
- 간선의 가중치 합이 최소여야 한다.
사례
- 도로 건설
- 전기 회로
- 통신
- 배관
MST Algorithm
Kruskal MST Algorithm
💡 탐욕적인 방법(greedy method)을 이용해서 네트워크의 모든 정점을 최소 비용으로 연결하는 최적 해답을 구하는 것
- 간선 선택 기반 알고리즘
- 이전 단계에서 만들어진 신장 트리와 상관없이 무조건 최소 간선만을 선택하는 방법
과정
- 그래프의 간선들을 가중치의 오름차순으로 정렬
- 정렬된 간선 리스트에서 순서대로 사이클을 형성하지 않는 간선 선택
- 선택한 간선을 MST 집합에 추가
- MST가 만들어질때까지 반복
Prim MST Algorithm
💡 시작 정점에서부터출발하여 신장트리 집합을 단계적으로 확장 해나가는 방법
- 정점 선택 기반 알고리즘
- 이전 단계에서 만들어진 신장 트리를 확장하는 기법
과정
- 시작 정점만 MST 집합에 포함
- MST 집합에 인접한 정점들 중에서 최소 비용의 간선으로 연결된 정점을 선택해서 트리를 확장
- MST가 만들어질 때까지 반복
알고리즘 복잡도
Kruskal의 MST 알고리즘 복잡도
💡 간선이 적을때 유리
Kruskal 알고리즘은 대부분 간선들을 정렬하는 시간에 좌우된다.
사이클 테스트 등의 작업은 정렬에 비해 매우 신속하게 수행된다.
- 네트워크의 간선 e개를 퀵정렬과 같은 효율적인 알고리즘으로 정렬한다면 Kruskal 알고리즘의 시간복잡도는 O(e∗loge)가 된다.
Prim의 MST 알고리즘 복잡도
💡 간선이 많을때 유리
주 반복문이 정점의 수 n만큼 반복하고, 내부 반복문이 n번 반복하므로 Prim의 알고리즘은 O(n2)의 복잡도를 가진다.
알고리즘 사용 위치
희박한 그래프
- O(e∗loge)인 Kruskal의 알고리즘이 유리하다.
밀집한 그래프
- O(n2)인 Prim의 알고리즘이 유리하다