深さ優先探索(DFS)とは、グラフや木構造におけるノードの探索アルゴリズムの一つです。この手法は、出発点から可能な限り深く、一つの経路を辿ってノードを探索していく特徴があります。
具体的には、あるノードを訪問した後、そのノードの未訪問の子ノードの一つを選択し、さらにその子ノードから同様に深く探索を進めます。
行き止まりに到達したり、目標のノードを発見できなかったりした場合、探索経路を一つ前のノードに戻り、そのノードの未訪問の子ノードから再度探索を開始します。この後戻りのプロセスをバックトラックと呼びます。
このアルゴリズムは、再帰的なアプローチまたはスタックを用いた反復的なアプローチで実装することが可能です。
再帰的な実装では、現在のノードを訪問する関数が、その子ノードに対して自身を呼び出すことで深部の探索を行います。一方、スタックを用いた実装では、訪問すべきノードをスタックに積み、スタックからノードを取り出しては探索を続け、その子ノードをスタックに積むという操作を繰り返します。
深さ優先探索は、経路の存在確認や、迷路の解法、グラフの連結成分の探索など、特定のタスクに適しています。しかし、探索空間全体が非常に深い場合、目的のノードが浅い階層に存在しても、それに到達するまで非常に時間がかかる可能性があります。
また、探索の過程で探索木が指数関数的に増大する問題に直面することがあります。
この手法は、解が一つだけ存在するような場合に特に有効であり、一方で、複数の解が存在し最短経路を求めたい場合は、別のアルゴリズムである幅優先探索(BFS)の方が適していると言えます。
