Free Lines Arrow
본문 바로가기
Algorithm/알고리즘 기본

[Algorithm] MST(Minimum Spanning Tree)

by skahn1215 2021. 8. 10.
728x90
반응형

MST 란?

  • Minimum Spanning Tree 최소 신장 트리이다.

  • 간선의 가중치를 고려 하여 최소 Spanning Tree 를 만든다.

  • 싸이클이 없는 연결된 무방향 그래프를 트리 라고 한다.

  • 모든 정점들이 연결이 되어 있어야 된다.

  • 가중치의 합이 최소가 되어야 한다.
  • 해가 유일하진 않다.
    - 최소 비용을 찾는 트리이기 때문에 동일한 가중치의 간선이 있을경우 해가 여러개가 될수 있다.

  • Kruskal 알고리즘, Prim 알고리즘 이 있다.

  • MST를 들어가기전에 Spanning Tree 를 알고가야한다.

 

 

 

 

Spanning Tree

  • 신장트리라고 한다.
  • 그래프의 모든 정점을 가지는 트리이다.

 

 

 

특징

  • 트리의 특징은 모두 포함된다.
  • 하나의 그래프는 여러 Spanning Tree 를 가질 수 있다.

 

 

그림설명

https://www.tutorialspoint.com/data_structures_algorithms/spanning_tree.htm

 

 

 

 

MST 의 구조 및 생성 방법

N 개의 도시가 있고 도시를 연결 하는 방법은 다양하다.

최소 비용으로 도시들을 연결하고 싶다 이럴때 MST 알고리즘을 쓰면된다.

 

MST 를 만드는 순서는 다음과 같다.

  • 1. A 집합을 만든다 
  • 2. 가중치가 적은 Edge을 찾는다.
  • 3. 찾은 Edge를 A에 추가 했을때 Cycle이 생기는 지 판단한다 .
  • 4. Cycle이 생기는 경우 패스한다. 

 

 

 

완성된 MST

 

 

 

 

MST 알고리즘

 

순서

  • 1.처음에는 A  집합을 만든다.
  • 2. A = 0 이다. 공집합이다.
  • 3. 집합 A에 대해서 안전한 에지를 하나 찾은후 A에 더 한다.
  • 4. 에지의 개수가 n-1 개가 될때 까지 3번을 반복한다.

 

 

 

안전한 Edge 란?

A 에  (U,V) 를 추가 했을때  A 가 어떤 MST의 부분 집합이 될 경우 (U,V) 는 A에 대해서 안전하다고 한다.

 

 

 

 

안전한 Edge 찾기

  • Cut: 그래프의 정점들을 2개의 집합 S 와 S를 제외한 나머지(V-S) 를 CUT 이라고 한다.
  • Corss: (U,V)가 있을때  U 는 S 집합에 속하고,  V 가 V-S 집합에 속했을때 Cross 라고 한다.
  • Respect: Cross 하지 않을때 존중 한다고 한다.
  • Cross 되는 것 또는 Respect 엣지는 안전하다고 한다.

 

 

 

 

 

Kruskal 알고리즘

https://vprog1215.tistory.com/158

 

[Algorithm] Kruskal

Kruskal MST를 만드는 알고리즘 입니다. 적은 비용으로 노드를 연결하는 것이 핵심입니다. 알고리즘 순서 에지들을 오름 차순으로 정렬한다. 에지들을 그 순서대로 하나씩 택한다. 싸이클 검사를

vprog1215.tistory.com

 

 

Prim 알고리즘

 

https://vprog1215.tistory.com/206

 

[Algorithm] Prim

Prime 이란? MST를 만드는 알고리즘 중 하나입니다. Kruskal 과 다른점은 시작점을 기준으로 만들게 됩니다. Prime 알고리즘 S 집합: 현재까지 선택된 노드들 S - A: 선택 되지 않은 노드들 핵심 선택한

vprog1215.tistory.com

 

728x90
반응형

'Algorithm > 알고리즘 기본' 카테고리의 다른 글

[Algorithm] 탐색문제 재귀로 구현해보기  (0) 2021.08.16
[Algorithm] Kruskal  (0) 2021.08.11
[Algorithm] DAG(Directed Acyclic Graph)  (0) 2021.08.03
[Algorithm] Graph Traversal BFS, DFS  (0) 2021.07.22
[Algorithm] Graph  (0) 2021.07.21

댓글