"집들의 마을이 있고 아무 쌍 사이든 케이블 까는 가격이 있어. 모든 집에 닿는 가장 싼 배선이 뭐야? 그게 최소 신장 트리야 — 그리고 가장 싼 안전한 엣지를 탐욕적으로 잡는 게 실제로 최적 답을 줘."
MST 가 뭔지 (그리고 아닌지)
가중 연결 그래프의 최소 신장 트리는 모든 정점을 연결하는 가장 싼 엣지 집합이야 — 정확히 V−1 엣지를 써 트리 (순환 없음) 를 이뤄. '이 네트워크 전체를 배선하는 최소-비용 방법이 뭐야?' 에 답해. 결정적으로, MST 는 두 특정 노드 사이 최단 경로에 관한 게 아니야; 모든 걸 연결 유지하는 총 엣지 무게를 최소화해. MST 에서 두 특정 집 사이 경로가 필요보다 길 수도 있어 — 괜찮아, 목표가 빠른 점대점 이동이 아니라 싼 전역 연결성이니까.
Kruskal 알고리즘: 가장 싼 엣지부터
Kruskal 은 아름답게 탐욕적이고 지난 lesson 의 도구를 재사용해: 모든 엣지를 무게로 정렬하고, 가장 싼 것부터 추가, 두 끝점이 이미 연결된 엣지는 건너뛰기 (그게 순환 만듦). '이미 연결됐어?' 가 정확히 find 질문이야 — 그래서 Union-Find 가 엔진: 다른 집합이면 끝점을 union, 루트 공유하면 엣지 건너뛰기. V−1 엣지 추가하면 멈춰. MST 전체가 '엣지 정렬 + union-find 순환 확인' 에서 떨어져. 정렬에 O(E log E).
Prim 알고리즘: 씨앗에서 키우기
Prim 은 다른 각도를 취해: 아무 정점 하나에서 시작해 트리를 바깥으로 키워, 지금까지 트리를 새 정점에 연결하는 가장 싼 엣지를 반복 추가. '새 정점으로 가장 싼 엣지' 가 최소-힙 쿼리야 — 그래서 Prim 은 MST 에 Dijkstra 가 최단 경로에 그렇듯, 둘 다 Heaps 트랙의 우선순위 큐로 굴러. Kruskal 은 엣지로 생각하고 (다 정렬); Prim 은 frontier 키우기로 생각해 (가로지르는 엣지의 힙). 둘 다 유효한 MST 를 만들어.
왜 여기선 탐욕이 통하나 (보통 안 통해)
탐욕 알고리즘은 종종 틀려 — 국소적으로 최선인 선택 잡기가 전역 최적을 자주 놓쳐 (Paradigms 트랙에서 이게 실패하는 걸 봐). MST 는 탐욕이 증명 가능하게 정확한 유명한 경우 중 하나야, cut property 덕에: 정점을 두 그룹으로 나누는 어떤 방식에든, 그 분할을 가로지르는 단 하나의 가장 싼 엣지는 늘 어떤 MST 에 포함하기 안전해. Kruskal 이랑 Prim 둘 다 늘 가장 싼 가로지르는 엣지를 취하는 규율 있는 방법일 뿐이야. 네트워크 배선 너머, MST 는 클러스터링 (MST 짓고, 가장 비싼 k−1 엣지를 잘라 k 개 자연 클러스터) 이랑 외판원 문제 근사를 굴려.