최소 신장 트리(Minimum spanning tree)
모든 점을 잇는 트리(tree) 가운데 변 길이의 합이 가장 작은 것. 가장 짧은 변부터 순환을 만들지 않게 고르는 욕심쟁이 방법(크러스컬)이 정확한 답을 준다.
마을 열 곳을 전선으로 이어 모두 전기가 통하게 하려 합니다. 전선 값은 길이에 비례하고, 어느 두 마을 사이에든 전선을 놓을 수 있습니다. 가장 싸게 잇는 방법은 무엇일까요? 모두 이어지기만 하면 되니 순환은 낭비입니다. 순환이 있으면 그 위의 가장 긴 전선을 걷어 내도 여전히 이어져 있으니까요. 그래서 답은 언제나 모든 점을 잇는 트리, 곧 신장 트리입니다. 문제는 후보가 너무 많다는 것입니다. 점 10개 사이의 신장 트리(spanning tree)는 케일리 공식(Cayley's formula)
1956년 미국의 수학자 조지프 크러스컬이 내놓은 방법은 단순합니다. 모든 변을 짧은 것부터 정렬해 놓고 차례로 보면서, 이미 이어진 두 점을 다시 잇는 변(순환을 만드는 변)이면 버리고 아니면 받아들입니다. 매 순간 가장 좋아 보이는 것을 고르고 되돌아보지 않는 욕심쟁이 알고리즘(greedy algorithm)인데, 이 문제에서는 정확히 최적입니다.
방법:
고른 변의 길이 합은
왜 욕심이 통할까요? 점들을 아무렇게나 두 무리로 가르면, 두 무리를 잇는 변 가운데 가장 짧은 것은 반드시 어떤 최소 신장 트리에 들어 있습니다(절단 성질, cut property). 그 변이 빠진 최소 신장 트리가 있다고 합시다. 거기에 이 변을 더하면 순환이 하나 생기고, 그 순환은 두 무리 사이를 한 번 더 건너야 제자리로 돌아옵니다. 그렇게 다시 건너는 변을 빼고 이 변을 넣으면, 여전히 신장 트리이면서 더 짧거나 같습니다. 크러스컬이 받아들이는 변은 언제나 '그 변의 한쪽 끝 조각'과 나머지를 가르는 절단(cut)에서 가장 짧은 변입니다. 두 점이 이미 같은 조각인지는, 조각들을 동치류(equivalence class)로 보고 조각마다 대표 점 하나를 정해 두어 두 점의 대표가 같은지 비교하는 합집합-찾기(union-find) 구조로 거의 즉시 알 수 있어서, 전체 시간은 변 m개를 정렬하는
1957년 벨 연구소의 로버트 프림이 발표한 방법(체코의 수학자 보이테흐 야르니크가 1930년에 먼저 찾았습니다)은 한 점에서 출발해, 지금 트리에서 밖으로 나가는 변 가운데 가장 짧은 것을 하나씩 붙여 나갑니다. 가장 짧은 변을 꺼내는 데 우선순위 큐(priority queue)를 씁니다. 변 길이가 모두 다르면 최소 신장 트리는 하나뿐이라, 순서는 달라도 결과는 같은 트리입니다. 길이가 같은 변이 있으면 최소 신장 트리가 여럿일 수 있지만, 길이 합은 모두 같습니다. 비슷해 보이는 다익스트라 알고리즘(에츠허르 데이크스트라)의 최단 경로(shortest path) 트리는 출발점에서 각 점까지의 거리를 줄이는 것이라 결과가 다릅니다. 최소 신장 트리에서 두 점 사이의 길은 꽤 멀리 돌아갈 수 있습니다.
이어지는 곳. 이 문제는 1926년 체코의 수학자 오타카르 보루프카가 모라비아 지방의 전력망을 설계하며 처음 풀었다고 알려져 있고, 크러스컬(1956)과 프림(1957)의 방법이 뒤를 이었습니다. 평면 위의 점들에서는 보로노이 다이어그램(Voronoi diagram)이 변 후보를 크게 줄여 줍니다. 보로노이 칸이 서로 맞닿은 두 점끼리만 이으면 삼각형 그물이 생기는데, 이것을 들로네 삼각분할(러시아의 수학자 보리스 들로네의 이름)이라 하고, 최소 신장 트리의 변은 모두 이 안에 들어 있습니다. 최소 신장 트리에서 가장 긴 변 k−1개를 끊으면 점들이 k개 무리로 나뉩니다. 이것을 단일 연결 군집(single-linkage clustering)이라 하며, 가까운 이웃을 사슬처럼 따라 묶기 때문에 둥근 무리를 가정하는 k-평균 군집(k-means clustering)과 달리 길쭉한 무리도 잘 찾습니다. 두 점 사이를 '잇는 길 가운데 가장 긴 변이 가장 짧은 길의, 그 가장 긴 변의 길이'로 다시 재면, 그 값은 최소 신장 트리 위의 길에서 가장 긴 변의 길이와 같고 강한 삼각부등식(triangle inequality)
모든 점을 한 번씩 들르고 돌아오는 가장 짧은 순회를 찾는 외판원 문제(traveling salesman problem)는 NP-난해(NP-hard)합니다. NP-완전(NP-complete) 문제만큼 또는 그보다 어려워서, 빠른 풀이법이 알려져 있지 않다는 뜻입니다. 그래도 거리가 삼각 부등식
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- 그래프
… 확률)이 되고, 그 위를 떠도는 산책자가 페이지랭크를 계산합니다. 변에 길이를 붙이면 최단 경로와최소 신장 트리문제가, 지도의 나라를 점으로 바꾸면 4색 정리가, 수십억 명의 친구 관계를 보면 좁은 세상 현상이 …
- 최단 경로
… 점을 이어 주는 가장 짧은 도로망을 찾는 것은 다른 문제로, 한 점에서의 거리 대신 변 길이의 합을 줄이는최소 신장 트리가 답입니다. 도로망이 한꺼번에 차를 얼마나 많이 보낼 수 있는지는 최대 흐름 최소 절단 정리가 …
- k-평균 군집
… 같은 답이 나옵니다. 차원이 높은 자료는 주성분 분석으로 먼저 줄인 뒤 군집을 찾기도 합니다. 점들의최소 신장 트리에서 가장 긴 변 k − 1개를 끊어 k개 무리로 나누는 방법(단일 연결 군집)은 k-평균과 달리 …
- 보로노이 다이어그램
… 보리스 들로네가 연구해 들로네 삼각분할이라 합니다. 여기에는 모든 기준점을 가장 짧은 선분들로 잇는최소 신장 트리가 언제나 들어 있어서, 트리를 찾을 때 모든 쌍 대신 이 선분들만 보면 됩니다. 기준점마다 가중치를 주어 …
- 욕심쟁이 알고리즘
… 보이는 것입니다. 이렇게 증명되는 대표적인 예가 순환을 만들지 않는 한 가장 짧은 변부터 고르는 크러스컬의최소 신장 트리, 가장 드문 두 기호부터 묶는 허프만 부호, 가장 가까운 점부터 확정하는 다익스트라 …
- 힙과 우선순위 큐
… '아직 확정하지 않은 점 가운데 가장 가까운 점'을 힙에서 꺼내고, 1957년 로버트 프림이 발표한최소 신장 트리알고리즘도 지금 트리에 가장 가까운 점을 힙에서 꺼냅니다. 허프만 부호는 가장 드문 두 기호를 …
- 트리
… 그래프는 모두 신장 트리를 품고 있고, 변마다 길이가 있을 때 길이의 합이 가장 작은 신장 트리가최소 신장 트리입니다. 다익스트라 알고리즘도 점마다 어느 이웃에서 왔는지를 기록하면 출발점을 뿌리로 하는 최단 경로 …
- 풍부화된 범주: 거리를 범주로
… 거리는 '가장 높은 고개가 가장 낮은 길'의 그 고개 높이입니다. 일방통행이 없는 도로 지도라면 이 거리는최소 신장 트리위의 길에서 가장 긴 도로의 길이와 같고, 계층적 군집의 나무 그림(덴드로그램)이 바로 이런 초거리입니다. …