【ばっくとらっきんぐ】

バックトラッキング とは?

最終更新:
💡 試す、行き詰まったら戻る、別の候補へ

候補を順に試し、成立しない選択から戻って別の候補を探す探索方法。部分解と枝刈り、状態を戻す理由、探索量の限界を解説します。

📌 このページのポイント
バックトラッキング:戻って別の候補へ選択する地点候補A・Bを試せる① Aを試す制約違反が判明この枝は続けない③ Bを試す条件を満たす探索を続ける② 選択を取り消す変更した状態も戻すBの先の候補へ
番号はこの例の探索順、左外側の矢印は戻る操作。解を見落とさない条件で枝を除外し、状態を元に戻してから次の候補を試します。
ひよこ ひよこ
バックトラッキングは、やり直すこと?
ペンギン先生 ペンギン先生
選択肢を試し、解につながらないと分かったら、その選択をした地点へ戻って別の候補を試す方法だよ。少しずつ解を作る探索で使うんだ。
ひよこ ひよこ
全部作ってから、正しいか見るの?
ペンギン先生 ペンギン先生
途中の部分解でも確認できるよ。たとえば、制約を満たす配置を探すとき、途中で既に制約違反なら、その配置を続ける必要がない。成立しない枝を早めに探索対象から外すんだ。
ひよこ ひよこ
気に入らない候補は、すぐ外してよい?
ペンギン先生 ペンギン先生
後で正しい解になる可能性があるなら、勝手には外せないよ。その部分解からは解を完成できない、と判断できる条件が必要なんだ。外し方を間違えると、正しい解を見落としてしまう。
ひよこ ひよこ
戻るときは、何をするの?
ペンギン先生 ペンギン先生
直前に加えた選択や、それで変更した状態を元に戻す。それから別の候補を試すよ。以前の候補の値が残ると、別の枝の判定までおかしくなるんだ。
ひよこ ひよこ
解が見つかったら終わり?
ペンギン先生 ペンギン先生
一つ見つかればよい問題では終われるけれど、全解を探すなら、解を記録して探索を続ける。再帰で書くこともあるよ。枝を減らせる場合があっても、候補が増えると探索量が大きくなることはあるんだ。
もっと詳しく知りたい人へ

深さ優先探索とどう関係する?

候補の選択を木として見ると、部分解から一つの枝を深く試し、戻って次の枝へ進む探索です。NISTも、可能な部分解の木に対する深さ優先探索として説明しています。

再帰を使わないと実装できない?

再帰は選択地点と戻り先を管理する便利な方法ですが、必須ではありません。スタックなどで候補や状態を管理する実装も考えられます。重要なのは、戻る地点と状態を正しく管理することです。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「バックトラッキング」って出てきたら「候補を試し、行き詰まったら戻って別の候補を探す方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Backtracking」 = 後戻りすること
💬 選択した地点へ戻り、別の選択肢を試す探索方法を表します。

参考資料

← 用語集にもどる