Spanning Tree, MST: 최소 신장 트리
Spanning Tree, Minimum Spanning Tree, MST, 최소 신장 트리, 신장 트리
정의
Spanning Tree 는 그래프의 모든 정점을 포함하는 부분 트리. MST (Minimum Spanning Tree) 는 간선 가중치 합이 최소인 spanning tree.
Kruskal
간선을 가중치 오름차순 정렬, Union-Find 로 사이클 만들지 않는 간선을 그리디하게 추가.
sort(edges.begin(), edges.end());
DSU dsu(n);
long long total = 0;
for (auto [w, u, v] : edges) {
if (dsu.merge(u, v)) total += w;
}
O(E log E).
Prim
한 정점에서 시작, 최소 가중치 간선을 priority queue 로 반복 확장.
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
vector<bool> vis(n);
pq.push({0, 0});
long long total = 0;
while (!pq.empty()) {
auto [w, u] = pq.top(); pq.pop();
if (vis[u]) continue;
vis[u] = true;
total += w;
for (auto [v, ew] : adj[u]) if (!vis[v]) pq.push({ew, v});
}
O(E log V).
Borůvka
병렬화 좋음. 각 컴포넌트에서 최소 outgoing edge 를 동시 선택, 반복.
참고
- Union-Find (Kruskal)
- Priority Queue (Prim)
- Shortest Path (다름 유의)
이 글의 용어 (3개)
- 분리 집합 (Disjoint Set, Union-Find)algorithm
- 정의 분리 집합 (Disjoint Set, Union-Find) 은 서로 겹치지 않는 집합들을 관리하며, 다음 두 연산을 거의 상수 시간 (amortized O(α(N)), α는…
- 최단 경로 (Shortest Path)algorithm
- 정의 최단 경로 (Shortest Path) 는 그래프 G = (V, E) 에서 시작 정점 s 에서 목표 정점 t 까지 가는 경로 중 가중치 합이 최소인 경로 를 찾는 문제. 단…
- Priority Queue / Heap: 우선순위 큐algorithm
- 정의 Priority Queue 는 우선순위가 가장 높은 원소를 O(log N) 에 pop 할 수 있는 자료구조입니다. Binary Heap 이 표준 구현. Max-heap: 부…
💬 댓글