CS/Algorithm 이론

[Algorithm] 최소 신장 트리 Minimum Spanning Tree

Minimum Spanning Tree(MST)

MST(Minimum Spanning Tree)에 대해 알아보기 전에 Spanning Tree가 무엇인지 부터 알아야 한다.

Spanning Tree란 1. 그래프의 모든 정점을 포함 2. 간선의 수가 가장 적음(n-1개) 3. 사이클이 없음 인 트리의 특수한 형태이다.

위의 두 조건을 만족하는 경우는 여러가지 이므로 하나의 그래프에는 많은 신장 트리(spanning tree)가 존재할 수 있다. 이는 BFS, DFS를 이용하여 찾을 수 있다.

 

그렇다면 MST는 무엇일까

MST는 위에서 설명한 spanning tree 중에서 사용된 간선들의 가중치 합이 최소인 트리이다. 각 간선의 가중치가 동일하지 않을 때 단순히 가장 적은 간선을 사용한다고 해서 최소 비용이 얻어지는 것은 아니다. 가중치를 고려하여 최소 비용의 Spanning Tree를 선택해야 하는데 이를 MST라고 한다. 


MST의 특징

위에서 언급한 Spanning Tree의 특징을 포함한다.

  1. 간선의 가중치의 합이 최소이다.
  2. n개의 정점을 가지는 그래프에 대해 반드시 (n-1)개의 간선만을 사용해야 한다.
  3. 사이클이 포함되어서는 안된다.

MST 구현방법

Kruskal MST 알고리즘

그리디한 방법을 이용하여 가중치를 간선에 할당한 그래프의 모든 정점을 최소 비용으로 연결하는 최적의 해답을 구하는 알고리즘이다. MST의 특징인 최소 비용의 간선 & 사이클 없음을 근거로 각 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택한다. 간선 선택을 기반으로 하며 이전 단계에서 만들어진 신장 트리와는 상관없이 무조건 최소 간선만을 선택한다. union-find(disjoint set)을 이용해 구현하며 O(ElogE)의 시간복잡도를 가진다. (정렬에 의해)

  1. 그래프의 간선들을 가중치의 오름차순으로 정렬한다.
  2. 정렬된 간선 리스트에서 순서대로 간선을 선택한다. 가장 낮은 가중치를 먼저 선택하며 이미 선택된 간선들과 사이클을 형성하는 간선을 제외한다.
  3. 해당 간선을 현재 MST의 집합에 추가한다.
  4. (N-1)개의 간선이 선택되면 종료한다.

 

Prim MST 알고리즘

시작 정점에서부터 출발해서 신장트리 집합을 단계적으로 확장 해나가는 방법이다. 정점 선택을 기반으로 하며 이전 단계에서 만들어진 신장 트리를 확장하는 방법이다. 우선순의 큐를 이용해 구현하며 O(ElogV)의 시간복잡도를 가진다.

  1. 먼저 시작 정점은 0으로 초기화하고 나머지 정점의 가중치 정보를 INF로 초기화 한다.
  2. 시작 정점의 인접한 정점들의 가중치를 갱신한다.
  3. 이후 선택되지 않은 정점 집합 중 가중치가 가장 작은 정점을 선택하고 해당 정점의 인접 정점들의 가중치를 갱신한다
  4. 위의 과정을 트리가 모든 정점을 가질 때까지 반복한다.

 

References

https://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html

 

728x90
반응형

'CS > Algorithm 이론' 카테고리의 다른 글

[Algorithm] 비트마스킹  (0) 2021.09.21
[Algorithm] 다이나믹 프로그래밍 Dynamic Programming  (0) 2021.08.14
[Algorithm] Hash table  (0) 2021.07.25
[Algorithm] 이진 힙 Binary Heap  (0) 2021.07.25
[Algorithm] Red Black Tree  (0) 2021.07.25