**Topological sort(위상 정렬)**는 DAG(방향 비순환 그래프)의 정점을 선형으로 정렬하여 모든 간선 u->v에서 u가 v보다 앞에 오도록 합니다. "이 작업들을 그 의존성을 고려할 때 어떤 순서로 할 수 있는가?"에 답합니다.
개념
흔한 두 가지 접근: Kahn 알고리즘(in-degree가 0인 노드를 반복적으로 제거) 또는 DFS(역 후위 순서). 유효한 정렬은 사이클이 없을 때만 존재합니다.
예시 (Kahn 알고리즘)
python
collections deque
():
indeg = {u: u graph}
u graph:
v graph[u]:
indeg[v] +=
queue = deque([u u indeg indeg[u] == ])
order = []
queue:
u = queue.popleft()
order.append(u)
v graph[u]:
indeg[v] -=
indeg[v] == :
queue.append(v)
order (order) == (graph)
topo_sort({: [], : [], : []})
