Skip to content

Latest commit

 

History

History
112 lines (91 loc) · 7.73 KB

180826.md

File metadata and controls

112 lines (91 loc) · 7.73 KB

그래프2(DAG(Directed Acyclic Graph), 위상 정렬, MST(Minimum Spanning Tree), Prim, 최단 경로, 벨만포드(Bellman-Ford))

관련 문제들

[issue]에 대한 정리

[#issue1] DAG(Directed Acyclic Graph)의 개념

* 방향성이 있는 비순환 그래프
* 사이클이 없는 방향 그래프를 의미한다.

[#issue2] 위상 정렬(Topological Sort)

* 위상 정렬이란
    * 어떤 일을 하는 순서를 찾는 알고리즘이다.
    * 즉, 방향 그래프에 존재하는 각 정점들의 선행 순서를 위배하지 않으면서 모든 정점을 나열하는 것
    
* 위상 정렬의 특징
    * 하나의 방향 그래프에는 여러 위상 정렬이 가능하다.
    * 위상 정렬의 과정에서 선택되는 정점의 순서를 위상 순서(Topological Order)라 한다.
    * 위상 정렬의 과정에서 그래프에 남아 있는 정점 중에 진입 차수가 0인 정점이 없다면, 
      위상 정렬 알고리즘은 중단되고 이러한 그래프로 표현된 문제는 실행이 불가능한 문제가 된다.
  
* 위상 정렬 해결 방법
    1. 진입 차수가 0인 정점(즉, 들어오는 간선의 수가 0)을 선택
      * 진입 차수가 0인 정점이 여러 개 존재할 경우 어느 정점을 선택해도 무방하다.
    2. 선택된 정점과 여기에 부속된 모든 간선을 삭제
    3. 위의 과정을 반복해서 모든 정점이 선택, 삭제되면 알고리즘 종료
    
* 위상 정렬 예시
    * 각각의 작업이 완료되어야만 끝나는 프로젝트
    * 선수 과목

[#issue3] 최소 비용 신장 트리(MST, Minimum Spanning Tree)

* Spanning Tree란
    * 그래프 내의 모든 정점을 포함하는 트리, "Spanning Tree = 신장 트리 = 스패닝 트리"
    * Spanning Tree는 그래프의 **최소 연결 부분 그래프** 이다.
        * 최소 연결 = 간선의 수가 가장 적다.
        * n개의 정점을 가지는 그래프의 최소 간선의 수는 (n-1)개이고, (n-1)개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 되고 이것이 바로 Spanning Tree가 된다.
    * 즉, 그래프에서 일부 간선을 선택해서 만든 트리
* Spanning Tree의 사용 사례
    * 통신 네트워크 구축
        * 예를 들어, 회사 내의 모든 전화기를 가장 적은 수의 케이블을 사용하여 연결하고자 하는 경우
        * n개의 위치를 연결하는 통신 네트워크를 최소의 링크(간선)를 이용하여 구축하고자 하는 경우, 최소 링크의 수는 (n-1)개가 되고, 따라서 Spanning Tree가 가능해진다.
* MST(Minimum Spanning Tree, 최소 신장 트리)란
    * Spanning Tree 중에서 사용된 간선들의 가중치 합이 최소인 트리, "MST = Minimum Spanning Tree = 최소 신장 트리"
        * 각 간선의 가중치가 동일하지 않을 때 단순히 가장 적은 간선을 사용한다고 해서 최소 비용이 얻어지는 것은 아니다.
        * MST는 간선에 가중치를 고려하여 최소 비용의 Spanning Tree를 선택하는 것을 말한다.
        * 즉, 네트워크(가중치를 간선에 할당한 그래프)에 있는 모든 정점들을 가장 적은 수의 간선과 비용으로 연결하는 것이다.
* MST의 특징
    1. 간선의 가중치의 합이 최소여야 한다.
    2. n개의 정점을 가지는 그래프에 대해 반드시 (n-1)개의 간선만을 사용해야 한다.
    3. 사이클이 포함되어서는 안된다.
* MST의 사용 사례
    * 통신망, 도로망, 유통망에서 길이, 구축 비용, 전송 시간 등을 최소로 구축하려는 경우
        * 도로 건설: 도시들을 모두 연결하면서 도로의 길이가 최소가 되도록 하는 문제
        * 전기 회로: 단자들을 모두 연결하면서 전선의 길이가 가장 최소가 되도록 하는 문제
        * 통신: 전화선의 길이가 최소가 되도록 전화 케이블 망을 구성하는 문제
        * 배관: 파이프를 모두 연결하면서 파이프의 총 길이가 최소가 되도록 연결하는 문제

[#issue3-1] Prim MST 알고리즘

* Prim MST 알고리즘이란
    * 시작 정점에서부터 출발하여 신장트리 집합을 "단계적으로 확장" 해나가는 방법
        * 정점 선택을 기반으로 하는 알고리즘이다.
        * 이전 단계에서 만들어진 신장 트리를 확장하는 방법이다.
* 과정
    1. 시작 단계에서는 시작 정점만이 MST(최소 비용 신장 트리) 집합에 포함된다.
    2. 앞 단계에서 만들어진 MST 집합에 인접한 정점들 중에서 최소 간선으로 연결된 정점을 선택하여 트리를 확장한다.
        * 즉, 가장 낮은 가중치를 먼저 선택한다.f
    3. 위의 과정을 트리가 (N-1)개의 간선을 가질 때까지 반복한다.

[#issue3-2] Kruskal MST 알고리즘

* Kruskal MST 알고리즘이란
    * "탐욕적인 방법(greedy method)" 을 이용하여 네트워크(가중치를 간선에 할당한 그래프)의 모든 정점을 최소 비용으로 연결하는 최적 해답을 구하는 것
        * MST(최소 비용 신장 트리) 가 1) 최소 비용의 간선으로 구성됨 2) 사이클을 포함하지 않음 의 조건에 근거하여 "각 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택"한다.
        * 간선 선택을 기반으로 하는 알고리즘이다.
        * 이전 단계에서 만들어진 신장 트리와는 상관없이 무조건 최소 간선만을 선택하는 방법이다.
* 과정 
    1. 그래프의 간선들을 가중치의 오름차순으로 정렬한다.
    2. 정렬된 간선 리스트에서 순서대로 사이클을 형성하지 않는 간선을 선택한다.
        * 즉, 가장 낮은 가중치를 먼저 선택한다.
        * 사이클을 형성하는 간선을 제외한다.
    3. 해당 간선을 현재의 MST(최소 비용 신장 트리)의 집합에 추가한다.

[#issue4] 최단 경로(Shortest Path)

[#issue4-1] Bellman-Ford 알고리즘

Reference

🏠 Go Home