Minimum Spanning Tree
, 최소 스패닝 트리라고도 불림Kruskal 알고리즘
그리디 알고리즘 방식으로, 가장 유리한 간선을 하나씩 선택해 나아가는 방식
- 간선을 하나씩 선택하면서 트리를 완성해나감
[구현 과정]
1. 모든 간선을 가중치에 따라 오름차순으로 정렬
2. 가중치가 낮은 간선부터 선택하면서 트리를 증가
2-1. 만약 해당 간선 선택 시 사이클이 생긴다면, 다음으로 가중치가 낮은 간선 선택
3. n-1개의 간선이 선택될 때까지 2번 반복
[특징]
코드가 간결
but, 간선 리스트 오름차순 정렬이 필요 (n log n
) + 간선이 많은 경우 불리함
Prim 알고리즘
- 임의의 정점에서 시작해서 인접 정점 중 최소 비용의 간선이 존재하는 정점을 선택하는 방식
- 정점을 하나씩 선택하면서 트리를 완성해나감
[구현과정]
1. 임의 정점을 하나 선택해서 시작
2. 선택한 정점과 인접하는 정점들 중 최소 비용의 간선이 존재하는 정점 선택
2-1. 만약 사이클이 생긴다면 해당 간선 skip
3. 모든 정점이 선택될 때까지 1, 2번 반복
[알고리즘 적용]
1. 각 정점에 대한 체크를 했는지 체크해줘야 하므로 visited 배열을 만들어줌
2. 각 정점에 대한 최소 간선 비용을 저장해줄 minV 배열을 만들어줌
minV[i] = (타 정점 👉🏻 i번 정점) 최소 간선 비용 저장
[특징]
코드가 지저분
but, 간선 정렬 필요없음
Kruskal 알고리즘
정점이나 간선을 선택할 때마다
서로소 집합 union
을 시도 하면서, 같은 부모에 속하는 지 확인하면 됨
Prim 알고리즘
- 정점을 선택할 때마다 visited 배열을 확인해서, 신장 트리에 포함되지 않은 정점인지 체크함
- 신장 트리에 포함되지 않은 정점 중 최소 간선을 갖는 정점을 찾아 연결함