結論
深さ優先探索は1本の枝を行き止まりまでたどってから分かれ道に戻る方法で、使うメモリは少ないものの、最初に見つかる解が手数最小とは限りません。幅優先探索は出発点に近い深さから1段ずつすべて調べる方法で、手数が最小の解を最初に見つけられますが、多くのメモリを使います。
比較表
| 観点 | 深さ優先探索 | 幅優先探索 |
|---|---|---|
| 英語 | depth-first search(DFS) | breadth-first search(BFS) |
| 調べる順番 | 1本の枝を行き止まりまで進み、戻って次の枝へ | 同じ深さのノードをすべて調べてから、次の深さへ |
| これから調べるノードの管理 | スタック(後入れ先出し) | キュー(先入れ先出し) |
| 最初に見つかる解 | 手数が最小とは限らない | 手数が最小の解(1手ごとのコストが等しければ、合計コストも最小) |
| メモリの使用量 | 少ない。今の道筋と分かれ道に残った枝だけを保持する(およそb×m) | 多い。同じ深さのノードをまとめて保持する(およそbのd乗) |
| 解が見つかる保証 | 無限に深い枝や、同じ状態に戻るループがあると、見つからないことがある | 枝分かれの数が有限なら、解がある限りいずれ見つかる |
| 向いている問題 | メモリが限られている場合や、解が深い位置に多くある問題 | 最短の手順が必要な場合や、解が浅い位置にありそうな問題 |
| G検定での問われ方 | 探索木の図からノードを調べる順番を答えさせる形や、最短の保証がない点が問われる | 最短の手数の解が見つかる点とメモリの多さ、ハノイの塔などのパズルへの当てはめが問われる |
| シラバス項目 | 技術分野 項目3 探索・推論 | 技術分野 項目3 探索・推論 |
最終確認日:2026年11月1日
それぞれの説明
深さ優先探索
深さ優先探索は、探索木の1本の枝を、行き止まりに着くまで奥へたどる方法です。解がなければ1つ前の分かれ道まで戻り(バックトラック)、まだ調べていない枝に進みます。迷路で、突き当たるまで進んでから引き返すやり方と同じです。
覚えておくのは、今たどっている道筋と、途中の分かれ道に残った枝だけです。1つのノードから出る枝の数をb、最も深いところまでの深さをmとすると、保持するノードはおよそb×m個で済みます。そのため、深い問題でもメモリが足りなくなりにくい方法です。一方で、先に選んだ枝の奥にある遠回りの解を先に見つけることがあり、無限に続く枝に入り込むと戻ってこられません。
幅優先探索
幅優先探索は、出発点のすぐ下にある深さ1のノードをすべて調べ、次に深さ2のノードをすべて調べる、というように1段ずつ広げる方法です。浅い順に調べるので、最初に見つかる解は、出発点からの手数が最も少ない解です。
その代わり、同じ深さのノードをまとめて覚えておく必要があります。最も浅い解の深さをdとすると、保持するノードはおよそbのd乗個に増えます。b=10、d=6なら約100万個です。
使い分けと発展
最短の手順が必要で、解が浅い位置にありそうなら幅優先探索が向いています。メモリが限られ、解が深い位置に多くあるなら深さ優先探索が向いています。両者の長所を合わせた方法に、深さの上限を少しずつ広げながら深さ優先探索をくり返す反復深化深さ優先探索があります。
どちらも、ゴールまでの近さの見込みを使わずに、決まった順番で機械的に調べる方法です。分岐が増えると、調べるノードの数は爆発的に増えます。第1次AIブームの探索は、迷路やパズルのようなトイ・プロブレムは解けても、選択肢が膨大な現実の問題を解くには至りませんでした。
見分けるコツ
- 名前のとおり、深さ優先は「縦に掘る」、幅優先は「横に広げる」と覚えます。探索木の図の問題では、この順番でノードに番号を振っていけば答えが出ます。
- 2つの性質は表裏の関係です。手数が最小の解が保証されるのは幅優先、メモリが少なく済むのは深さ優先です。選択肢でこの2つが入れ替わっていないかを確かめます。
- ここでの「最短」は手数(段数)の最短です。1手ごとのコストが異なる問題では、幅優先探索でも合計コストが最小の解になるとは限りません。
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
これから調べるノードを後入れ先出しのスタックで管理すると深さ優先探索に、先入れ先出しのキューで管理すると幅優先探索になる。
答えを見る
答え ◯ 正しい
スタックでは直前に展開したノードの子から調べるので、奥へ奥へと進みます。キューでは先に加えた浅いノードから順に調べるので、1段ずつ広がります。
-
枝分かれの数が有限な問題でも、同じ状態に戻るループがあると、幅優先探索は解があっても見つけられなくなる。
答えを見る
答え × 誤り
幅優先探索は浅い順に調べるため、ループで同じ状態が重複しても、解のある深さまでいずれ到達します。ループで解に届かなくなるおそれがあるのは、1本の枝をたどり続ける深さ優先探索です。
-
深さの上限を1つずつ広げながら深さ優先探索をくり返す反復深化深さ優先探索は、少ないメモリのまま、幅優先探索と同じく手数が最小の解を見つけられる。
答えを見る
答え ◯ 正しい
上限の深さまでは深さ優先で調べるので、保持するノードは少なく済みます。浅い上限から順に試すため、最初に見つかる解は手数が最小です。Korfの1985年の論文が、この方法の効率を分析しています。
関連問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目3 探索・推論)
- Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, 4th edition (Pearson) (Chapter 3 Solving Problems by Searching)
- Richard E. Korf, Depth-first iterative-deepening: An optimal admissible tree search, Artificial Intelligence 27(1), 97–109 (1985)
ほかの違い比較
- アジャイルとウォーターフォールの違い 進め方とAI開発での使い分け
- 赤池情報量規準(AIC)とベイズ情報量規準(BIC)の違い 罰則の重さ
- バギングとブースティングの違い 並列か逐次か、減らす誤差の違い
- バッチ正規化とレイヤー正規化の違い 平均と分散を計算する範囲の違い
- バッチ学習・ミニバッチ学習とオンライン学習の違い 更新回数とぶれ
- BERTとGPTの違い エンコーダとデコーダ、学習課題の違い
- CBOWとスキップグラムの違い 予測の向きと学習の速さ
- 分類問題と回帰問題の違い 出力の形で見分けるコツと評価指標
- CNN・RNNとTransformerの違い 得意なデータと計算の並列性
- 協調フィルタリングとコンテンツベースフィルタリングの違い 仕組み
- 共分散と相関係数の違い 式の関係と単位・値の範囲
- データ汚染とAdversarial Attackの違い 学習時か推論時かと対策
- 決定木とランダムフォレストの違い 解釈のしやすさと精度・安定性
- 営業秘密と限定提供データの違い 3つの要件と刑事罰の有無
- Faster R-CNNとYOLOの違い 2段階型と1段階型、速度と精度
- GANと拡散モデル(Diffusion Model)の違い 学習と生成の仕組み
- GANとVAEの違い 識別器の有無と学習の仕組み
- GDPRと個人情報保護法の違い 法的根拠・本人の権利・制裁金
- 勾配降下法と誤差逆伝播法の違い 勾配を使う側と求める側
- グリッドサーチとランダムサーチの違い 試行回数の決まり方と効率
- ホールドアウト検証と交差検証の違い 分割回数・計算量・使い分け
- 画像分類(物体識別)と物体検出の違い 出力の形と使い分け
- 委託・第三者提供と共同利用の違い 同意の要否と受け手が使える範囲
- k-means法と階層的クラスタリングの違い クラスタ数を決める時期と計算量
- 個人情報・個人データと保有個人データの違い 範囲の入れ子とかかる義務
- 個人情報と個人識別符号の違い 包含関係と当たる例・当たらない例
- L1正則化とL2正則化の違い 罰則の形と重みが0になるか
- 最小二乗法と最尤法の違い 推定の基準と結果が一致する条件
- LIMEとSHAPの違い 局所近似とシャープレイ値の使い分け
- LSTMとGRUの違い ゲートの数と記憶セルの有無
- 機械学習とディープラーニングの違い 包含関係と特徴量の決め方
- 平均絶対値誤差(MAE)と平均二乗誤差(MSE)の違い 外れ値への強さ
- 正規化と正則化の違い 目的と代表的な手法を表で整理
- 主成分分析(PCA)と特異値分解(SVD)の違い 目的と計算の関係
- 主成分分析(PCA)とt-SNEの違い 線形か非線形か、保つ構造の違い
- 適合率と再現率の違い 分母の違いと重視する場面
- プルーニング・量子化と蒸留の違い 何を減らすかと元モデルの扱い
- Q学習とSARSAの違い 更新式の1か所と方策オン・オフ
- RNNとLSTMの違い 記憶セルと勾配消失の起きにくさ
- Self-AttentionとSource-Target Attentionの違い Q・K・Vの出どころ
- セマンティック・インスタンスとパノプティックの違い 背景と個体の扱い
- 新規性と進歩性の違い 比べ方とAI発明での論点
- シグモイド関数とソフトマックス関数の違い 出力の合計と使い分け
- ソフトローとハードローの違い 法的拘束力の有無と日本・EUの例
- 強いAIと弱いAIの違い 心をもつと考えるかの違い
- 教師あり学習・教師なし学習と強化学習の違い 学習の手がかりと代表例
- 特許権と著作権の違い 発生・保護対象・期間とAIでの使い分け
- 匿名加工情報と仮名加工情報の違い 加工の程度と第三者提供の可否
- 転移学習とファインチューニングの違い 重みを固定するか更新するか
- 請負契約と準委任契約の違い 完成義務とAI開発での使い分け
- Zero-shotとFew-shotの違い 与える例の数と重みを更新しない点