【とぽろじかるそーと】

トポロジカルソート とは?

公開:
💡 「先にやるべきこと」から順番に並べるグラフの整列術!
📌 このページのポイント
トポロジカルソート → 依存関係を守って並べる タスク依存グラフ(DAG) A B C D E A→C → AをやってからC トポロジカル順序 1 A B 入次数0 2 C D 入次数0 3 E 入次数0 結果→ A B C D E ※結果は一意とは限らない (A,B の順は B,A でもOK)
トポロジカルソートのイメージ → 依存グラフから実行順序を決定
ひよこ ひよこ
トポロジカルソートって普通のソートと何が違うの?
ペンギン先生 ペンギン先生
普通のソートは「数値の大小」で並べるけど、トポロジカルソートは「依存関係」で並べるんだ。「AをやってからBをやる」「BをやってからCをやる」みたいな順序制約を守りながら一列に並べるよ
ひよこ ひよこ
具体的にはどんなところで使うの?
ペンギン先生 ペンギン先生
身近なのはビルドシステムだね。ライブラリAがライブラリBに依存していたら、Bを先にコンパイルしないといけない。他にもパッケージマネージャのインストール順序や、大学の履修科目の前提条件の解決にも使われるよ
ひよこ ひよこ
どうやって実装するの?
ペンギン先生 ペンギン先生
代表的な方法は2つ。1つは深さ優先探索で探索が終わった順に積み上げる方法。もう1つはカーンのアルゴリズムで、「入ってくる辺が0のノード」から順にキューで処理していく方法だよ
ひよこ ひよこ
もし循環依存があったらどうなるの?
ペンギン先生 ペンギン先生
いい質問だね!循環があるとトポロジカルソートは不可能になる。AがBに依存、BがAに依存…だと順番が決まらないよね。逆に言えば、トポロジカルソートできるかどうかで循環依存の検出にも使えるんだ
ひよこ ひよこ
プログラマーが意識しなくても裏で使われてたりする?
ペンギン先生 ペンギン先生
めちゃくちゃ使われてるよ!npm install や apt-get の依存解決、WebpackRollupのモジュールバンドル、さらにはExcelのセル再計算順序もトポロジカルソートベースなんだ。気づかないうちにお世話になってるアルゴリズムだね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「トポロジカルソート」って出てきたら「依存関係を守った順番に並べるアルゴリズム」と思えればだいたいOK!
📖 おまけ:英語の意味
「Topological Sort」 = 位相的ソート
💬 「トポロジー(位相幾何学)」から来た名前だけど、実際にはグラフ理論の概念だよ。ノードの「前後関係(位相)」を保つソートという意味だね
← 用語集にもどる