ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] 최소 신장 트리 (MST, Minimum Spanning Tree)
    Problem Solving/Algorithm 2020. 3. 8. 19:39

    신장 트리 (Spanning Tree) 란?

    - 그래프 내의 모든 정점을 포함하는 트리

    - 사이클이 형성되지 않도록 모든 정점이 연결된 트리

    - 최소 연결 부분 그래프로 N개의 정점, N-1개의 간선을 가진다.

     

    [예시]

    해당 그래프에서 다음과 같은 신장 트리를 구할 수 있다.

     

    최소 신장 트리 (Minimum Spanning Tree) 란?

    - 주어진 그래프에서 최소한의 비용으로 만든 트리

    - 간선 가중치의 합이 최소인 스패닝 트리

    - 통신망, 도로망, 유통망 구축 비용 등에 활용

     

    MST 구현 방법

    - 크루스칼 알고리즘 (Kruskal's Algorithm)

    - 프림 알고리즘 (Prim's Algorithm)

     

    # 크루스칼 알고리즘 (Kruskal's Algorithm)

    - 탐욕적 방법을 이용하여 최적의 해답을 구하는 알고리즘

    - MST의 특징에 근거하여, 각 단계에서 사이클을 이루지 않는 최소 비용 간선 선택

    - 디스조인트셋 (disjoint Set) 을 활용

    - 희소 그래프 일 경우 적합한 기법

    - 시간 복잡도 : O($E\log E$)

     

    [구현 방법]

    - 그래프의 간선 가중치를 기준으로 오름차순 정렬
    - 결과로 반환할 MST 집합은 공집합으로 초기화
    - 정렬된 순서대로 사이클을 형성하지 않는 간선 선택
      (단, 가장 낮은 가중치 우선 선택하되, 사이클 형성하는 간선 제외.)
    - 선택한 간선 MST 집합에 추가
    - 모든 엣지에 대한 연산 수행

    [사이클 생성 확인]

    - 간선이 같은 집합에 속해 있는지 확인
    - Union-Find 알고리즘 이용 (동일한 집합일 경우, 루트 노드가 같다.)

     

     

    # 프림 알고리즘

    - 가장 작은 가중치의 엣지를 시작점으로 하여 집합을 단계적으로 확장하는 알고리즘

    - 정점 기준 선택

    - 밀집 그래프 일 경우 적합한 기법

    - 시간 복잡도 : O($V^{2}$), O($E\log V$)

     

    [구현 방법]

    - MST 집합에 시작 정점만 포함
    - 이전 단계에서 생성된 MST 집합에 인접한 정점 중 최소 값으로 연결된 정점 선택
    - N-1개의 간선을 가질 때 까지 반복 수행

     

    [관련 문제]

    https://www.acmicpc.net/problem/1197

    https://www.acmicpc.net/problem/1922

    https://www.acmicpc.net/problem/15481

     

    [참고]

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

    https://ratsgo.github.io/data%20structure&algorithm/2017/11/28/MST/

    'Problem Solving > Algorithm' 카테고리의 다른 글

    [Algorithm] 네트워크 플로우 (Network Flow)  (0) 2020.03.09

    댓글

@Jo Grini's Blog