有向非循環グラフ(DAG)のトポロジカルソート
Kahnのアルゴリズム(入次数を使用したBFS)とDFSベースの両方のアプローチによるDAGのトポロジカルソートを学びます。前提条件、ビルド順序、依存関係の解決を理解します。
Graph Properties
詳細な説明
トポロジカルソート
トポロジカルソートは、有向非循環グラフ(DAG)の頂点の線形順序を生成し、すべての辺(u, v)においてuがvの前に来るようにします。DAGでのみ定義されます。
Kahnのアルゴリズム(BFSベース)
- すべてのノードの入次数を計算
- 入次数0のすべてのノードをキューに追加
- キューが空でない間:
- ノードuをデキューし、結果に追加
- uの各隣接ノードvの入次数を減らす
- vの入次数が0になったらキューに追加
- 結果にすべてのノードが含まれれば有効、そうでなければサイクルが存在
DFSベースのアルゴリズム
- DFSを実行し、各ノードの終了時刻を記録
- ノードを終了時刻の逆順にソート
- これが有効なトポロジカル順序
複数の有効な順序
DAGは多くの有効なトポロジカル順序を持つ場合があります。
時間計算量
両方のアルゴリズムとも**O(V + E)**で実行されます。
ユースケース
トポロジカルソートはビルドシステム(コンパイル順序の決定)、タスクスケジューラ(大学の履修条件)、CI/CDパイプライン(ジョブ実行順序)、スプレッドシートの再計算(セル依存関係)、Apache Airflowなどのデータパイプラインオーケストレーションツールの基盤です。