【とぽろじかるそーと】

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

💡 「先にやるべきこと」から順番に並べるグラフの整列術!
📌 このページのポイント
トポロジカルソート → 依存関係を守って並べる タスク依存グラフ(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」 = 位相的ソート
💬 「トポロジー(位相幾何学)」から来た名前だけど、実際にはグラフ理論の概念だよ。ノードの「前後関係(位相)」を保つソートという意味だね
← 用語集にもどる