web-dev-qa-db-ja.com

バックトラッキングとブルートフォース検索の違い

現在、アルゴリズムのコースを受講していますが、ブルートフォース検索とバックトラッキングの正確な定義を理解するのに苦労しています。私が理解しているように、次のことが当てはまります。

  • ブルートフォース検索[〜#〜] bfs [〜#〜])は、問題に対するすべての可能な解決策を計算し、満たすものを選択するアルゴリズムの一種です。要求事項。
  • Explicit制約は、各選択肢に可能な値を与えます(たとえば、選択肢1〜3は{1, 2}に制限され、選択肢4は{3, 4, 5}に制限されますなど)。検索の「実行ツリー」が形成されます。
  • 暗黙的制約は、さまざまな選択肢を相互に関連付けます(たとえば、選択肢2は選択肢1よりも大きくなければなりません)。これは、潜在的なソリューションを削除するためにBFSで使用されます。
  • BacktrackingはBFSの拡張であり、implicit制約はすべての選択の後に評価されます(afterすべてのソリューションが生成されたのではなく)。潜在的なソリューションは、「終了」する前に破棄できることを意味します。

基本的に、私が疑問に思っているのは、これが正確であるかどうかだけです。そうでない場合は、いくつかの説明をいただければ幸いです。前もって感謝します。

10

短い答え:質問を正しく読んだら、あなたは正しいです。

あなたが言うように明示的な制約ドメイン各変数のsox∈SSに注意してくださいはコレクションとして記述する必要はありません。たとえば、Sと述べることができますは、25未満のすべての素数のセットです。

暗黙の制約一方、2つ以上で定義された述語です変数P(x1、バツ2、...、バツn。たとえばx2<x3。ただし、より多くの変数(たとえば、3つ)に対して定義することもできます。

ブルートフォース検索explicitのみを取得します制約を考慮に入れる:Sから可能なすべての値を割り当てますから変数xおよびこれはall変数用です。このような構成を構築した後、すべての暗黙の制約が満たされていることを確認します

Bactracking一方、このプロセスを最適化することを目的としています。 暗黙的制約が定義されているすべての変数が割り当てられた瞬間から、その制約を検証します。制約が失敗すると、すぐに変数の1つに別の値が割り当てられます。利点は、たとえばブルートフォースがxに2を割り当てた場合です。1= 2および5からx2= 5、および暗黙の制約x1 > x2が失敗すると、xに値が割り当てられません3、バツ4、...これらの値のすべての構成で失敗することを確認するだけです。

もちろん、バックトラックにはいくつかの簿記が含まれます。特定の値が設定されたときにどの制約が「発火」するかを見つける必要があります。しかし、多くの制約プログラミング問題(たとえばSATなど)の場合、それを行うための効率的なアルゴリズムが存在します(監視されたリテラルなど)。さらに、Gecodeのような制約プログラミングライブラリにも、高速制約が最初に評価されるなどの高度なキューイングメカニズムがあります。

7