Topological sort は DAG (directed acyclic graph、有向非環グラフ) の頂点を線形に順序付けし、すべてのエッジ u->v に対して u が v より前 にくるようにします。これは「与えられた依存関係のもとで、これらのタスクをどの順序で実行できるか?」という質問に答えます。
基本的な考え方
2つの一般的なアプローチがあります:Kahn のアルゴリズム (入次数が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({: [], : [], : []})
