Frage

Jedes Mal, wenn ich für einen Algorithmus für 2-Sat suchen, habe ich den Algorithmus für die Entscheidung Form des Problems zurück: Gibt es einen gesetzlichen Satz von Werten existieren, die alle Klauseln erfüllen. Sie jedoch, dass nicht erlaubt, mir leicht eine Reihe von Befriedigung Boolesche Werte zu finden.

Wie kann ich effizient eine rechtliche Reihe von Werten finden, die eine 2-Sat-Instanz befriedigen?

Ich bin in C ++ arbeite mit der Boost-Bibliothek und würde Code zu schätzen wissen, die leicht integriert werden können.

Vielen Dank im Voraus

War es hilfreich?

Lösung

Wenn Sie einen Entscheidungsalgorithmus zum Erkennen, wenn es existiert eine gültige Zuordnung zu 2-SAT, können Sie verwenden, um tatsächlich die tatsächliche Zuordnung zu erfahren.

Zuerst lief 2-SAT Entscheidungsalgorithmus auf dem gesamten Ausdruck. Angenommen, es sagt, es ist eine gültige Zuordnung.

Nun, wenn x_1 eine wörtliche ist, X_1 Assign 0. Nun sein berechnen die 2-SAT für den resultierenden Ausdruck (Sie werden einige andere Literale aus diesem Grund müssen zuordnen, zum Beispiel, wenn x_1 OR x_3 angezeigt wird, müssen Sie auch set zu x_3 auf 1).

Wenn die resultierende expresion 2-erfüllbar ist, dann können Sie nehmen x_1 0 zu sein, sonst nehmen x_1 bis 1.

Jetzt können Sie diese über jede wörtliche erfahren.

Für einen effizienteren Algorithmus, würde ich vorschlagen, Sie versuchen, die Implikation Graph-Ansatz.

Sie können mehr Informationen finden Sie hier: http://en.wikipedia.org/wiki/ 2-Erfüllbarkeit

Der relevante Teil:

  

a 2-Erfüllbarkeit Instanz   auflösbar, wenn und nur wenn jede Variable   die Instanz gehört zu einem anderen   Komponente des stark verbundenen   Implikation Graph als die Negation   die gleiche Variable. da stark   verbundene Komponenten können gefunden werden in   lineare Zeit durch einen Algorithmus basierend auf   Tiefensuche, die gleiche lineare   Zeit gebunden gilt auch für   2-Erfüllbarkeit.

Die Literalen in jeder stark verbundenen Komponente sind entweder alle gleich Null oder alle 1.

Andere Tipps

Es gibt mindestens einen Algorithmus, dass listet alle Lösungen für ein 2-sat Problem, von Tomas Feder: http://www.springerlink.com/content/j582276p06276l12/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top