Was ist bei einer booleschen Schaltung für Variablen (die nur die Gatter NOT, AND und OR verwendet) der effizienteste Weg, um die durch die Schaltung dargestellte boolesche Formel zu extrahieren? Gibt es einen Polytime-Algorithmus für dieses Problem?
10
Antworten:
Wenn ich Ihre Frage richtig verstehe, würde ich sagen, dass Sie die Standardreduktion von CIRCUIT-SAT auf SAT verwenden könnten: Stellen Sie jedes Gate als neue Variable dar und stellen Sie dann die gesamte Schaltung in CNF-Form dar, wobei jede Klausel die Form , wobei die neue Variable ist und die Formel für das Gate durch , wobei die Variablen für andere Gates verwendet werden, um die Eingaben darzustellen. Dies kann durch einfaches Durchlaufen erfolgen (in linearer Zeit, was eindeutig optimal ist).(v↔ϕ) v ϕ
Wenn Sie beispielsweise drei Eingänge haben, , und , mit UND-Gattern, die und sowie und , und einem ODER-Gatter, das ihre Ausgänge verbindet, können Sie drei Variablen einführen, um die Gatter darzustellen - , bzw. - und schreiben Sie die Formel inBeachten Sie, dass die Ausgabevariable explizit enthalten ist.x1 x2 x3 x1 x2 x2 x3 v1 v2 v3
Einführung in Algorithmen von Cormen et al. erklärt dies ausführlich im Kapitel über NP-Vollständigkeit.
quelle