1行定義
深さ優先探索とは、探索木の1つの枝を行き止まりまで深くたどり、解がなければ1つ前の分かれ道まで戻って別の枝を調べる探索方法のことです。
くわしく
深さ優先探索は、探索木の1つの枝をできるだけ深くたどっていく探索方法です。行き止まり(それ以上進めないノード)に着いても解がなければ、1つ前の分かれ道まで戻り、まだ調べていない枝に進みます。この後戻りをバックトラックと呼びます。迷路で「突き当たるまで進み、だめなら直前の分かれ道に戻る」というやり方と同じです。
長所
保持しておくノードが少なく済みます。いまたどっている1本の道筋と、その途中の分かれ道に残っている枝だけを覚えておけばよいからです。1つのノードから平均b本の枝が出て、最も深いところまでの深さがmなら、覚える量はおよそb×mに比例します。同じ深さのノードをすべて覚える幅優先探索(およそb^d)と比べて、深い問題でもメモリが足りなくなりにくいのが特徴です。また、解が深い位置にたくさんある問題では、早く解にたどり着くことがあります。
短所
最初に見つかった解が、手数の最も少ない解とは限りません。たまたま先に選んだ枝の奥で、遠回りの解が見つかることがあるからです。さらに、探索木が無限に深い場合や、同じ状態に何度も戻ってくる場合には、1本の枝をたどり続けて解に届かないことがあります。そこで、深さに上限を設ける深さ制限探索や、上限を少しずつ広げる反復深化探索といった工夫が使われます。
幅優先探索との関係
これから調べるノードを、幅優先探索は先に入れたものから取り出す待ち行列(キュー)で管理します。深さ優先探索は、最後に入れたものから取り出すスタックで管理します。違いは取り出す順番だけですが、最短の手数の保証とメモリの量という性質がちょうど逆になります。
覚え方
「深さ=縦に突き進み、だめなら戻る。メモリは少ないが最短とは限らない」と覚えます。
G検定での出題
出題のされ方
幅優先探索との比較として、メモリの使用量や、最初に見つかる解が手数最小とは限らない点が問われます。探索木の図を示して、ノードを調べる順番を答えさせる形もあります。
混同しやすい用語
| 用語 | 意味 |
|---|---|
| 深さ優先探索このページの用語 | 探索木の1つの枝を行き止まりまで深くたどり、解がなければ1つ前の分かれ道まで戻って別の枝を調べる探索方法 |
| 幅優先探索 | 探索木の出発点に近いノードから順に、同じ深さのノードをすべて調べてから次の深さへ進む探索方法 |
違いを表で比べる
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
深さ優先探索で、行き止まりに着いたときに1つ前の分かれ道まで戻り、まだ調べていない枝に進む動きをバックトラックという。
答えを見る
答え ◯ 正しい
バックトラック(後戻り)をくり返すことで、1本ずつ順にすべての枝を調べられます。
-
深さ優先探索は、探索木が無限に深い場合や同じ状態を何度も訪れる場合に、解があっても見つけられないことがある。
答えを見る
答え ◯ 正しい
1本の枝をたどり続けるおそれがあるため、深さに上限を設ける深さ制限探索などの工夫が使われます。
-
深さ優先探索で最初に見つかった解は、出発点からの手数が最も少ない解であることが保証される。
答えを見る
答え × 誤り
手数最小の解が保証されるのは幅優先探索です。深さ優先探索は、先に選んだ枝の奥で遠回りの解を見つけることがあります。
この用語の練習問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目3 探索・推論)
- Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, 4th edition (Pearson) (Chapter 3 Solving Problems by Searching)