DFSと剪定

[深さ優先の検索]

深さ優先探索は、初期状態から、所定の規則は、一方のノードを見て、探索木を生成するために、目標状態が存在するか否かを確認し、そうでない場合、この状態で任意の接合部の次の層を生成するためのルールを使用してポイントは、再チェックのプロセスは、それが特定の状態がまだない場合、リーフノード(すなわち、ノードが生成することができる新たな状態)になるまで繰り返され、結果のバック層は、他の枝の拡張検索をとることができます。同じアプローチを使用すると、ターゲットの状態を見つけるまで進行するために採用されています。

[剪定]

剪定は、できるだけすぐに不要な探索木の枝を除外するための手段として、探索木のサイズを小さくすることです。いわゆる探索木の枝カットオフかのような画像を見、「剪定。」深さ優先探索では、一般的な剪定方法の次のカテゴリ:

1.最適化の検索順序

  オーダーの様々な枝の間に検索ツリーの各レベルにおけるいくつかの検索質問では、固定されていません。異なる検索順序が異なる探索木の形を生成し、その大きさも非常に異なっています。

  多くの場合、検索優先順位が少ないブランチノード。

2.同等の冗長性を除外します

  検索処理において、我々は、探索木に沿って現在のサブツリーのノードから決定することができるならば、ブランチの検索を行うだけそのうちの一つ、いくつかの異なるブランチが同等である達します。

3.フィージビリティ剪定

  我々は再帰的分岐はバックトラックの実装に、境界線に達することができなかった発見した場合、検索処理では、現在の状況は、時間内に確認することができます。私たちは道路に歩いていたとき、私はフロントが行き止まりである、あなたはすぐに出土迂回、再び道の終わりとはならない見たようなものです。

  いくつかの限界プルーニング可能性も呼び出されたときに被写体条件の範囲は、範囲は「境界を剪定。」

4.最適剪定

  検索プロセスの最適化問題では、現在の支出のコストは、その後に関係なく、国境に到達するために採用した戦略は、回答再帰を更新することはできませんどのように良い、最適解に現在の検索を超えていない場合。この時点で、あなたは現在のブランチの検索を停止することができ、バックを実行します。

のメモリ

  検索結果は、状態ごとに記録し、戻り状態を横切る繰り返しに直接検索することができます。これは、ノードが訪問されているかどうかをマップ、マークの私たちの深さ優先探索の時間のようなものです。

[例]

844元記事公開 ウォンの賞賛135 ビュー150,000 +を

おすすめ

転載: blog.csdn.net/qq_42815188/article/details/105100128