CS Study/CLRS (자료구조 | 알고리즘)
[CLRS] [20-4] Topological sort(위상정렬)
23학번이수현
2024. 12. 1. 00:09
1. Topological sort
- 순서에 어긋나지 않도록 주어진 Directed Graph의 모든 Node를 한 번씩 방문하는 방법
ex) 주어진 Directed Graph에서 N1 -> N2 엣지가 존재할 시, N1을 N2보다 먼저 방문해야 함
ex)
- (5 -> 4 -> 2 -> 3 -> 1 -> 0)
2. Topological Sort과정
- (진입 차수) = (들어오는 Node의 수)
- 진입 차수가 0인 Node 및 연결된 엣지 모두 제거 (기록)
- 제거 대상 Node가 여러개면 그들 가운데 하나만 제거
- 모든 Node를 방문할 때 까지 같은 과정 반복
- 제거한 Node의 순서가 Topological Sort한 순서가 된다.
3. Code
def topological_sort(graph):
while graph:
for i in graph.keys():
topoloical_check = True
for j in graph.keys():
if (i in graph[j]) == True:
topoloical_check =False
if (topoloical_check == True) :
print(i)
del graph[i]
break
graph = {0 : [],
1 : [],
2 : [3],
3 : [1],
4 : [0,1],
5 : [0,2]}
topological_sort(graph)
------------------------------------------------------------
4
5
0
2
3
1