-
[Data Structure] Minimum Spanning TreeCS/Data Structure 2021. 10. 8. 09:03
이 포스팅은 세미나를 위해
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/DataStructure를 참고하여 작성하였습니다.Spanning Tree
- 그래프 내의 모든 정점을 포함하는 트리
- Spanning Tree는 그래프의 최소 연결 부분 그래프이다.
- n개의 정점을 가지는 그래프의 최소 간선의 수는 n-1개이고, n-1개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 된다. 이것이 Spanning Tree이다.
Minimum Spanning Tree
- Spnning Tree 중에서 사용된 간선들의 가중치 합이 최소인 트리
MST 구현 방법
Kruskal Algorithm
- 각 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택하는 방법
알고리즘 동작 방식
https://gmlwjd9405.github.io/2018/08/29/algorithm-kruskal-mst.html- 그래프의 간선들을 가중치의 오름차순으로 정렬한다.
- 정렬된 간선 리스트에서 순서대로 사이클을 형성하지 않는 간선을 선택한다.
즉, 가장 낮은 가중치를 먼저 선택한다.
사이클을 형성하는 간선을 제외한다. - 해당 간선을 현재의 MST 집합에 추가한다.
중요!
- 간선을 MST 집합에 추가할 때 사이클을 형성하는지 체크
- 사이클 형성 여부 확인 방법: union-find 알고리즘
Prim Algorithm
- 시작 정점에서부터 출발하여 신장트리 집합을 단계적으로 확장해나가는 방법
알고리즘 동작 방식
https://gmlwjd9405.github.io/2018/08/30/algorithm-prim-mst.html- 시작 단계에서는 시작 정점만이 MST 집합에 포함된다.
- 앞 단계에서 만들어진 MST 집합에 인접한 정점들 중에서 최소 간선으로 연결된 정점을 선택하여 트리를 확장한다.
즉, 가장 낮은 가중치를 먼저 선택한다. - 위의 과정을 트리가 n-1개의 간선을 가질 때까지 반복한다.
Reference
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/DataStructure
https://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html
https://gmlwjd9405.github.io/2018/08/29/algorithm-kruskal-mst.html
https://gmlwjd9405.github.io/2018/08/30/algorithm-prim-mst.html
'CS > Data Structure' 카테고리의 다른 글
[Data Structure] T Tree (0) 2021.12.28 [Data Structure] 2-3 Tree (0) 2021.12.28 [Data Structure] Hash (0) 2021.10.08 [Data Structure] Red-Black Tree (0) 2021.10.08 [Data Structure] AVL Tree (0) 2021.10.07