1行定義
幅優先探索とは、探索木の出発点に近いノードから順に、同じ深さのノードをすべて調べてから次の深さへ進む探索方法のことです。
くわしく
幅優先探索は、問題を解く手順の候補を木の形(探索木)に広げ、出発点から近い順に調べていく探索方法です。探索木では、1つの状態を表す点をノード(節点)と呼びます。出発点から何本の枝をたどったかを、そのノードの深さと呼びます。
進み方
まず、出発点のすぐ下にある深さ1のノードをすべて調べます。次に深さ2のノードをすべて調べ、その次に深さ3へ進みます。木を上から1段ずつ、横に塗りつぶしていくイメージです。実際の処理では、これから調べるノードを待ち行列(キュー)に並べ、先に並べたものから順に取り出します。
長所と短所
浅いノードから順に調べるため、最初に見つかった解は、出発点からの手数が最も少ない解です。また、1つのノードから出る枝の数が有限であれば、解がある限りいずれ見つかります。
一方で、メモリを多く使います。1つのノードから平均b本の枝が出るとすると、深さdには約b^d個のノードが並びます。たとえばb=10なら、深さ5だけで約10万個です。幅優先探索は、同じ深さのノードをまとめて覚えておく必要があるため、深い問題ではメモリが足りなくなりがちです。
位置づけ
幅優先探索と深さ優先探索は、ゴールまでの近さの見込みを使わず、決まった順番で機械的に調べる探索です。第1次AIブームでは、迷路やハノイの塔のようなパズルをこうした探索で解く研究が進みました。しかし、現実の問題は組合せの数が膨大で、この方法だけでは解けません。この限界は、AIはトイ・プロブレム(おもちゃの問題)しか解けないという批判につながりました。
覚え方
「幅=1段ずつ横に広げる。だから最短の手数で見つかるが、メモリを食う」と覚えます。
G検定での出題
出題のされ方
深さ優先探索との比較として、手数が最も少ない解が最初に見つかるかどうかと、メモリの使用量の違いが問われます。迷路やパズルを探索木で解く場面の説明文を正誤判定させる形もあります。
混同しやすい用語
| 用語 | 意味 |
|---|---|
| 幅優先探索このページの用語 | 探索木の出発点に近いノードから順に、同じ深さのノードをすべて調べてから次の深さへ進む探索方法 |
| 深さ優先探索 | 探索木の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)