최소 스패닝 트리
Minimum Spanning Tree(MST)
간선의 가중치 합이 최소인 Spanning Tree를 의미함
Spanning Tree : 그래프 내에 있는 모든 정점을 연결하고, 사이클이 없는 그래프(Spanning Tree의 간선의 수 < 전체 간선의 수)
그래프 내의 모든 정점을 가장 적은 수, 적은 비용의 간선으로 연결한 그래프
MST 특징
간선의 가중치의 합이 최소여야 함
n개의 정점을 가진 그래프에 대해 n-1개의 간선만 사용해야 함
사이클이 포함되서는 안됨
MST 알고리즘
크루스칼 알고리즘
프림 알고리즘
크루스칼(Kruskal) 알고리즘
탐욕적인 방법을 사용하여 네트워크 내의 모든 정점을 최소 비용으로 연결하여 최적의 답을 구하는 알고리즘
최소 비용의 간선으로 사이클이 형성되지 않는 방식으로 간선을 선택함 → 간선 선택 기반의 알고리즘
이전 단계에서 만들어진 Spanning Tree를 고려하지 않고 무조건 최소 비용의 간선만 선택 → 탐욕적
과정
그래프의 간선들을 가중치를 기준으로 오름차순 정렬
정렬된 간선들을 순서대로 사이클이 형성되지 않는 간선을 선택
사이클 형성 여부 판단 →
union-find 알고리즘
선택된 간선을 MST 집합에 추가
시간복잡도 → O(ElogE + E)
간선 오름차순 정렬 →
O(ElogE)
union-find →
O(1) * E
코드
프림(Prim) 알고리즘
특정 시작 정점에서 출발하여 MST 집합을 확장해나가는 알고리즘
정점 선택 기반 알고리즘
과정
최초 MST 집합에는 시작 정점만 포함되어 있음
이전 단계에서 만들어진 MST 집합에 인접한 정점들 중 최소 간선으로 연결된 정점을 MST 집합에 포함
MST 집합에 인접 정점들 중 최소 간선을 가진 정점 찾기 →
우선순위 큐
활용우선순위 큐를 heap이나 array로 구현할 경우
사이클 방지하기 위해 방문 처리가 필요함
MST 집합에 포함된 간선의 수가 n-1개가 될 때까지 1~2 번을 반복
시간복잡도 → O(ElogV)
모든 노드에 대해 탐색
O(V)
* 우선순위 큐로 매 노드마다 최소 간선을 찾음O(logV)
⇒O(VlogV)
각 노드의 인접 간선 탐색
O(E)
* 최소 비용의 간선을 큐에 삽입O(logV)
⇒O(ElogV)
O(VlogV+ElogV)
로O(ElogV)
가 된다 (일반적으로 E가 V보다 큼)코드
Last updated