IT/CS

[알고리즘] 위상 정렬

Terriermon 2021. 7. 7. 22:42

위상 정렬(Topological Sort)

순서가 정해져있는 작업을 차례로 수행할 때, 순서를 결정하는 알고리즘

방향 그래프에 존재하는 각 정점들의 선행 순서를 위배하지 않고 모든 정점을 나열하는 것

나동빈 블로그

 

특징

- 하나의 방향 그래프에서 여러 위상 정렬이 가능
ex 1) 대학생되기 → 4학년 되기 → 정보처리기사 합격하기 → 자격서류 제출하기 → 졸업시험 신청 → 졸업하기
    2) 대학생되기 → 학과사이트 가입하기 → 졸업시험 신청하기 → 졸업하기

- DAG에만 적용이 가능 ▶ 사이클이 발생하는 경우 위상 정렬 수행 불가
DAG란? 2021.07.07 - [IT/CS] - [알고리즘] 방향 비순환 그래프

 

[알고리즘] 방향 비순환 그래프

Directed Acyclic Graph, DAG = 방향 비순환 그래프 = 유향 비순환 그래프 = ... 그래프 간선(Edge)에 <방향>이 있고, 처음 출발한 노드(정점) v에서 시작하여 다시 v로 돌아가는 방법이 없는 <비순환> 그래프

honeywater97.tistory.com

- 위상 정렬을 통해 1️⃣ 현재 그래프의 위상 정렬 가능 여부 2️⃣ 위상 정렬이 가능 시 결과를 알 수 있음

- 위상 정렬 과정 중, 그래프에 남아 있는 정점 중 진입 차수가 0인 정점이 없다면 위상 정렬 알고리즘은 중단됨

 

방법

1. 진입 차수가 0인 모든 정점을 Queue에 삽입

2. 선택된 정점과 관련된 간선 삭제
- 선택된 정점을 큐에서 삭제
- 선택된 정점에 부속된 모든 간서에 대해 간선 수 감소

3. 위 과정을 반복하여 모든 정점이 선택, 삭제 되면 알고리즘 종료

 

출처 https://gmlwjd9405.github.io/2018/08/27/algorithm-topological-sort.html

 

'IT > CS' 카테고리의 다른 글

[알고리즘] 네트워크 플로우  (0) 2021.07.08
[알고리즘] 백트래킹  (0) 2021.07.08
[알고리즘] 방향 비순환 그래프  (0) 2021.07.07
[DB] View  (0) 2021.06.28
[알고리즘] Java Collection  (2) 2021.06.20