Kruskal's MST Algorithm
Last updated
Was this helpful?
Last updated
Was this helpful?
신장트리(Spanning Tree)는 모든 vertex가 edge로 연결하면서 edge 사이에 사이클이 없는 그래프이다. vertex수는 edge수 + 1이 된다. 모든 vertex가 다 연결은 되어 있지만, 일부 edge를 사용하지 않아도 되는 점을 활용해 여러 문제를 해결할 수 있다. 예를 들어서 최소 비용으로 연결된 신장 트리를 찾을 때 사용할 수 있는데, 이것을 최소 신장 트리(Minimum Spanning Tree)라 한다.
대표적은 탐욕적 방법으로 최소 신장 트리 알고리즘이다.
동작 과정은 먼저 부모테이블을 만들어 자기 자신으로 부모로 초기화하고, 간선을 비용 오름차순으로 정렬하고 (sorted), 모든 정점을 방문할 때 까지 (for i in range(V)), 간선을 순서데로 확인하면서 사이클이 발생하는지 확인하고 (exist_cycle), 사이클이 발생하지 않을 경우만 부모테이블을 업데이트하여 트리에 포함시키고 (union) 이 과정을 반복 수행한다.
간선을 비용 오름차순으로 정렬한다.
cost
4
5
6
10
15
모든 정점을 방문할 때 까지 (for i in range(V)), 간선을 순서데로 확인하면서 사이클이 발생하는지 확인하고 (exist_cycle), 사이클이 발생하지 않을 경우만 트리에 포함시키고 (union) 이 과정을 반복 수행한다.
step 0
p[n]
0
1
2
3
step 1
p[n]
0
1
2
2
step 2
p[n]
0
1
0
2
step 3
p[n]
0
1
0
2
step 4
p[n]
0
0
0
2
https://velog.io/@ming/MST최소-신장트리-알고리즘 https://www.geeksforgeeks.org/kruskals-minimum-spanning-tree-algorithm-greedy-algo-2/ https://github.com/chaminhye/Algorithm/blob/master/src/concept/graph/Kruskal.java https://deep-learning-study.tistory.com/592