【でぃーえふえす】

DFS(深さ優先探索) とは?

💡 行けるところまで突き進んで、行き止まりになったら引き返す探索法
📌 このページのポイント
DFS(深さ優先探索)の動き A B E C D F 1 2 3 4 5 6 探索順: A → B → C → D → E → F(深い方を優先)
DFS(深さ優先探索)のイメージ
ひよこ ひよこ

DFSってBFSと何が違うの?

ペンギン先生 ペンギン先生

BFSが浅いところを全部見てから深くに行くのに対して、DFSは一つの道をとことん深く進んで、行き止まりになったら一つ前に戻って別の道を試す方式だよ。

ひよこ ひよこ

迷路で壁にぶつかるまで進んで、ダメなら引き返す感じだね!

ペンギン先生 ペンギン先生

その通り!実はこの方法、スタックというデータ構造を使うか、関数の再帰呼び出しで自然に実装できるんだ。プログラムの関数呼び出し自体がスタックだから、再帰と相性抜群なんだよ。

ひよこ ひよこ

どんなときにDFSを使うのがいいのかな?

ペンギン先生 ペンギン先生

すべてのパターンを列挙したいとき、グラフにループがあるか調べたいとき、あとはトポロジカルソートと呼ばれるタスクの依存関係を整理する処理に使うね。

ひよこ ひよこ

BFSよりメモリが少なくて済むって本当?

ペンギン先生 ペンギン先生

そうだよ。BFSは同じ深さのノードを全部キューに入れるから、幅が広いグラフだとメモリが爆発しがち。DFSは今進んでいる経路のノードだけ覚えておけばいいから、深さ分のメモリで済むんだ。

ひよこ ひよこ

DFSに弱点はあるの?

ペンギン先生 ペンギン先生

最短経路を保証しないのが最大の弱点だね。あと、無限に深い経路があると永遠に戻ってこられないこともある。その対策として深さに上限を設ける「反復深化探索」というテクニックもあるよ。BFSのメモリ効率とDFSの省メモリを両立した賢い方法なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
DFS」って出てきたら「一本道をとことん進んでから戻る探索法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Depth-First Search」 = 深さ優先探索
💬 Depth(深さ)を優先して探索するからこの名前なんだよ
← 用語集にもどる