Knowledge/알고리즘

위상 정렬 (topology sort)

똑똑한망치 2024. 7. 10. 10:26
728x90
반응형

위상 정렬은 사이클이 없는 방향 그래프에서 노드 순서를 찾는 알고리즘이다.

 

기능 특징 시간 복잡도(V : 노드 수, E: 엣지 수)
노드 간의 순서를 결정 사이클이 없어야 함 O(V + E)

 

 

위상 정렬의 핵심 이론

 

1. 진입 차수 이해하기

진입 차수(in-degree)는 자기 자신을 가리키는 에지의 개수이다.

 

 

이 때, 진입 차수 배열 D[N]은 아래와 같다.

1 2 3 4 5
0 1 1 2 2

 

 

2. 진입 차수 배열 D[N]에서 진입 차수가 0인 노드를 선택하고 선택된 노드를 정렬 배열에 저장한다. 그 후, 인접 리스트에서 선택된 노드가 가리키는 노드들의 진입 차수를 1씩 뺀다.

 

위 그림의 경우 진입 차수가 0인 노드 1을 선택하여 2, 3의 진입 차수를 1씩 빼 D[2], D[3]을 0으로 만든 것이다. 계속해서 다음 노드 2를 선택해서 반복한다. 이 과정을 모든 노드가 정렬될 때까지 반복한다. 여기서 진입 차수가 0인 노드 3을 먼저 선택했다면 3이 우선 위산 정렬 배열에 들어갈 것이다. 이를 통해 위상 저렬은 늘 같은 정렬 결과를 보장하지 않는다는것을 알 수 있다.

 

 

반응형

'Knowledge > 알고리즘' 카테고리의 다른 글

세그먼트 트리  (0) 2024.07.18
최소 신장 트리 알고리즘  (0) 2024.07.15
유니온 파인드 알고리즘 (Union-find)  (1) 2024.07.06
최단 경로 알고리즘  (0) 2024.07.04
유클리드 호제법  (0) 2024.07.01