バックトラックとは?候補を順に試し

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

バックトラックとは(全体像)

バックトラックは、いろいろな候補を順に試していき、うまくいかなくなったら少し戻って、別の候補を試す探索のやり方。最終的に、ありえる組み合わせをもれなく調べられる。

いちばんわかりやすいのが迷路。分かれ道で1つの道を選んで進み、行き止まりに来たら、分かれ道まで戻って別の道を試す。これをくり返せば、いつか出口が見つかる。この「進む→ダメなら戻る」の動きがバックトラックだ。

代表的な使いどころは、8クイーン問題(チェス盤にコマを互いにぶつからないように置く)や数独(空きマスに数字を入れて条件を満たす)。どれも「置いてみて、ダメなら戻して置き直す」で解ける。


詳しく:仕組みと枝刈りだけ覚えれば戦える

ここが記事の心臓部。バックトラックは、次の3つの部品でできている。

バックトラックの仕組み

部品はたらき
奥まで進む探索(DFS)候補を選んでとことん先まで進む
戻る(バックトラック)行き詰まったら一歩戻って別の候補を試す
枝刈り(プルーニング)ダメだと分かった道は早めに切り捨てる

このうち、効率を大きく左右するのが枝刈り。条件に違反すると分かった時点で、その先を調べずに打ち切る。これでむだな探索が減り、調べる量を大きく減らせる。

代表的な使いどころ

問題やること
8クイーン問題コマを置く→ぶつかったら戻して置き直す
数独数字を入れる→条件違反なら戻してやり直す
迷路探索道を進む→行き止まりなら分かれ道へ戻る

つまり、バックトラックは「進んで、ダメなら戻って、むだな道は早めに切る」探索。枝刈りがないと、ありえる組み合わせが多い問題では時間が爆発的に増えてしまう(最悪で指数的に増える)。だから枝刈りが効率のカギ、というわけだね。

わかりやすく言い換えると

要するに、バックトラックは「試して、ダメなら戻る」をくり返すやり方だ。

進む … 候補を1つ選んで先へ進む(迷路で道を選ぶ)

戻る … 行き止まりなら分かれ道まで戻る(別の道を試す)

枝刈り … ダメと分かった道は早めに切り捨てる(時間の節約)

ただ全部試すだけでなく、枝刈りでむだを減らすのがコツ。ここが効率の差になる。


試験のツボ

🔴 一番出る:進んで・ダメなら戻る探索

①候補を試し、行き詰まったら戻って別の候補へ

②ありえる組み合わせをもれなく調べる

🔴 次に出る:枝刈りで効率化

①ダメと分かった道は早めに打ち切る

②枝刈りがないと時間が爆発的に増える

🟡 押さえると安定:代表問題と分枝限定法

①代表は8クイーン・数独・迷路探索

②最適解を求める発展形が分枝限定法


よくある間違い

「バックトラックはふつうの探索(DFS)と同じもの」→ ✗  DFSに「戻る+枝刈り」を加えて強化したのがバックトラック。

「枝刈りはしてもしなくても速さは変わらない」→ ✗  枝刈りがあると探索量が大きく減る。効率のカギになる。

「バックトラックは必ず一瞬で解ける」→ ✗  最悪では時間が指数的に増える。だから枝刈りが要る。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(バックトラックの考え方)

📝 オリジナル問題 1 バックトラックの考え方

バックトラックの考え方に関する次の記述のうち、正しいものはどれか。

  1. 一度選んだ候補は決して変えず、行き詰まっても最後まで進み続けるやり方とされる
  2. 候補をいっさい試さず、最初から答えだけを直接書き出すことができる手法だ
  3. 候補を試し、行き詰まったら一歩戻って別の候補を試すことをくり返すやり方だ
  4. すべての候補を同時に並べて、戻ることなく一度の操作で答えを決めるものだ
オーエスペン
オーエスペン 解答・解説

解答は 3 だよ。

バックトラックは候補を試し、行き詰まったら戻って別の候補を試すくり返しなんだ。迷路で行き止まりに来たら引き返すイメージだよ。

選択肢1の「変えず進み続ける」、選択肢2の「試さず直接」、選択肢4の「戻らず一度で」はどれも誤りだよ。

選択肢判定理由
1行き詰まったら戻る
2候補を順に試す
3試して、ダメなら戻る
4戻りながら順に試す

オリジナル問題2(枝刈りの役割)

📝 オリジナル問題 2 枝刈りの役割

バックトラックの枝刈りに関する次の記述のうち、正しいものはどれか。

  1. 枝刈りはダメと分かった道を早めに打ち切り、調べる量を大きく減らす工夫のことだ
  2. 枝刈りは正しい道をわざと打ち切り、答えにたどり着けなくするための操作だ
  3. 枝刈りをしてもしなくても、調べる量も探索にかかる速さもまったく変わらないとされる
  4. 枝刈りはすべての道を最後まで調べてから、最後にまとめて消すだけの操作だ
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

枝刈りはダメと分かった道を早めに打ち切って、調べる量を減らす工夫なんだ。これがないと、組み合わせの多い問題では時間が爆発的に増えるよ。

選択肢2の「正しい道を打ち切る」、選択肢3の「変わらない」、選択肢4の「最後にまとめて消す」はどれも誤りだよ。

選択肢判定理由
1ダメな道を早めに打ち切る
2切るのはダメな道
3探索量が大きく減る
4途中で早めに切る

オリジナル問題3(分枝限定法との関係)

📝 オリジナル問題 3 分枝限定法との関係

バックトラックと分枝限定法の関係に関する次の記述のうち、正しいものはどれか。

  1. 分枝限定法はバックトラックとまったく無関係で、共通する考え方は一つもない手法だ
  2. 分枝限定法はバックトラックを発展させ、最適解を求められるようにした手法のことだ
  3. 分枝限定法はバックトラックより単純で、戻ることも枝刈りもしない探索のことだ
  4. 分枝限定法は答えがあるか調べるだけで、最適解を求めることはできない手法とされる
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

分枝限定法はバックトラックを発展させて、最適解を求められるようにした手法なんだ。バックトラックは「解の有無や全部の解」、分枝限定法は「いちばんよい解」を探すよ。

選択肢1の「無関係」、選択肢3の「戻らず枝刈りなし」、選択肢4の「最適解を求められない」はどれも誤りだよ。

選択肢判定理由
1バックトラックの発展形
2最適解を求める発展形
3枝刈りを使う
4最適解を求める手法

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る