본문으로 건너뛰기
김신건의 로그

Spanning Tree, MST: 최소 신장 트리

· 수정 · 📖 약 1분 · 155자/단어 #algorithm #graph #mst #kruskal #prim
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 를 동시 선택, 반복.

참고

이 글의 용어 (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: 부…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기