공대생 정리노트
Graphs(4) - MST(Minimum Spanning Tree) 본문
Minimum Cost Spaning Trees
input : An undirected, connected graph G
output : subgraph of G
- output의 모든 edge합이 가장 작아야 한다.
- 모든 vertices들은 연결이 되어 있어야 한다.
이때 첫번째 조건은 MST가 cycle이 없음을 의미한다. 만약 cycle이 존재한다면 그 cycle에서 edge를 하나 빼면 (2)의 조건을 만족하면서 더 작은 subgraph가 생기기 때문이다.
output은 여러개일 수 있으나 cost는 어떠한 solution에 대해서도 같다.
Prim's MST Algorithm
- 아무 vertex N에서 시작한다. MST에 N을 추가한다.
- N과 연결된 edge들 중 가장 작은 edge인 (N,M)를 고른다.
- M과 (N,M)을 MST에 추가한다.
- N과 M에 연결된 edge들중 가장 작은 edge를 고르고 다시 같은 방식으로 추가한다..
- 위를 반복한다.
Proof :
어떤 edge e가 추가될 때 현재 만들어진 tree와 e를 포함하고 있는 MST가 존재하고 있음을 증명하자.
mathematical induciton을 사용한다.
base case -
v가 starting vertex라고 하면 v에 연결된 가장 작은 cost edge e=(v,y)를 정하자.
MST에 있는 어떤 graph들중 하나라도 e를 가지고 있다면 base case는 만족된다.
만약 어떤 그래프도 가지고 있지 않다고 하자. MST에 속한 graph G*에 e를 더하게 된다면 그 그래프에 cycle이 생기게 된다. 그리고 그 cycle에는 v와 연결된 또다른 edge가 존재한다. 만약 그 edge의 cost가 e보다 크다면 G*보다 cost 총합이 작은 그래프가 생기므로 모순이다. 같아도 cost가 같으므로 e를 포함한 MST가 존재한다.
따라서 base case를 만족한다.
k번째 iteration에서 만족할 때 k+1번째 iteration에서 만족하는 것 보이기 -
g=(x,y)를 k+1번째 iteration에서 고른 edge라고 하자. iteration k번째에서 만들어진 tree를 T라고 하자.
T*을 MST에 속하면서 T를 포함한 그래프라고 하자. T+g가 T*에 포함이 안되어있다고 가정하자. T*+g는 g를 포함한 cycle이 생기게 될 것이다. 그 cycle은 T에 속한 vertices들과 속하지 못한 vertices들로 나눌 수 있다. 그 경계를 연결하는 edge들은 g를 포함하여 최소 2개인데, k+1번째 iteration에서 g를 선택했으므로 g가 경계를 연결하는 edge들 중 cost가 가장 작다.
따라서 g를 연결하고 나머지 edge를 하나 끊으면 MST는 유지가 된다. 따라서 k+1번째 iteration에서도 MST가 존재한다.
Running Time of Prim's MST
scan through the distance table : O(|V|^2+|E|)
Min-heap:O((|V|+|E|)log(|V|))
Kruskal's MST Algorithm
- 처음에 각자의 vertex들은 자체의 MST에 존재한다.
- MST에 속한 것들 중 가장 작은 두개의 MST를 merge한다.
- 반복
자세한 것은 algorithm 카테고리에서 추후 작성하겠다.
Total cost :
O(|E|log|E|)
출처 : 서울대학교 컴퓨터공학부 강유 교수님 자료구조 수업
'CS 공부 > 자료구조' 카테고리의 다른 글
Graphs(3) - Dijkstra's algorithm (0) | 2020.05.02 |
---|---|
Graphs(2) (0) | 2020.04.27 |
Graphs(1) (0) | 2020.04.25 |
Hashing(2) (0) | 2020.04.22 |
Hashing(1) (0) | 2020.04.21 |