MST, minumum spanning tree
최소신장트리
최소신장트리
입력 : n개의 도시가 있고, 도시와 도시를 연결하는 도로 비용이 주어진다.
출력 : 최소 비용으로 모든 도시들이 서로 연결되도록 하려고 한다.
무방향 그래프
무방향 가중치 그래프 G=(V, E)
이때 가중치는 양의 정수이다.
각 엣지 (u, v) 가 E에 속할 때, 가중치 w(u, v) 가 주어진다.
문제는 다음과 같은 조건을 만족하는 엣지들의 부분집합을 찾는 것이다.
T에 속한 엣지들에 의해 그래프의 모든 정점들이 서로 연결된다.
가중치의 합이 최소가 된다.
왜 트리라고 부르는가
일반적으로 컴공에서는 사이클이 없는 연결된 무방향 그래프를 트리라고 부른다.
MST 문제의 답은 항상 트리가 된다.
MST 를 찾으면 우선 모든 엣지들이 서로 연결되어있고 사이클을 만들지 않게 된다.
사이클을 이루게 될 경우, 사이클 상에서 하나의 노드를 버려도, 나머지 노드들이 서로 연결될 수 있기 때문이다. 그렇게 되면 애초에 MST가 되지 않는다. 왜냐하면 사이클을 이루는 노드들을 모두 제거해서 사이클이 안만들어질 때가지 제거하면 가중치가 최소값이 되므로, 굳이 사이클을 이룰 필요가 없는 것이다.
따라서 MST 의 경우는 항상 무방향이고 사이클을 이루지 않으며, 트리모양을 띄게 된다.
노드가 n개인 트리는 항상 n-1개의 엣지를 가지게 된다.
사용
네트워크 디자인에서 많이 사용된다. 반드시 사용된다고는 할 수 없지만, 가장 기본적인 기준점이 될 수 있다.
통신망, 도로망, 자전거도로 등
generic MST 알고리즘
어떤 MST 의 부분집합 A에 대하여 A에 새로운 엣지 (u, v)를 추가한다고 하더라도, 여전히 MST의 부분집합이 될 만큼 안전하다라고 표현할 수 있다.
어떤 엣지를 포함하는 MST에 대하여 엣지 1을 포함하는 MST 가 존재한다고 해서 "엣지 1은 MST에 반드시 소속된다"고 표현할 수 없다.
"엣지 1을 포함하는 MST가 존재할 수 있다."로 표현할 수 있을 뿐이다.
MST의 해는 하나가 아니라 여러개일 수 있기 때문이다.
진행순서
먼저 처음에는 MST의 부분집합 A는 공집합으로 시작한다.
그 뒤, 집합 A에 대해서 안전한 엣지 하나를 찾은 후, 이것에 A를 더한다.
엣지의 개수가 n-1이 될 때가지 2번을 반복한다.
엣지의 개수가 n-1이라는 뜻은 n개의 노드가 모두 연결되었음을 의미한다.
문제는 어떻게 "안전한 엣지"를 찾는가...?
안전한 엣지 찾기
그래프의 정점들을 두 개의 집합 S와 V-S 로 분할하고 이를 컷(S, V-S)이라고 부르자.
에지 (u, v)에 대해서 u가 S에 소속되어있고, v가 V-S에 소속되어있을 때, 에지 (u, v)는 컷(S, V-S)을 크로스한다고 말할 수 있다.
엣지들의 부분집합 A에 속한 어떤 엣지도 컷(S, V-S)를 크로스 하지 않을 때, 컷(S, V-S) 는 부분집합 A를 존중한다(respect)고 말한다.
즉, A가 어떤 MST 의 부분집합이고(A를 포함하는 MST가 존재할 때), (S, V-S)는 A를 존중하는 컷이라고 한다면, 이 컷을 cross 하는 엣지들 중에서 가장 가중치가 작은 엣지(u, v)는 A에 대해서 안전하다.
결국, A가 어떤 MST의 부분집합이므로, 빨간 트리로 표시되고 있는 A는 MST를 이룬다는 것을 보장하는 상태이다.
이때, S와 V-S를 cross 하는 엣지 중에서 최소의 가중치를 가진 엣지를 선택하면 MST가 될 수 있다.
Last updated
Was this helpful?