Étant donné un circuit booléen sur variables (qui utilise uniquement les portes NON, ET et OU), quelle est la manière la plus efficace d'extraire la formule booléenne représentée par le circuit? Existe-t-il un algorithme de polytime pour ce problème?n
10
Réponses:
Si je comprends bien votre question, je dirais que vous pouvez utiliser la réduction standard de CIRCUIT-SAT à SAT: Représentez chaque porte comme une nouvelle variable, puis représentez l'ensemble du circuit sous forme CNF, chaque clause ayant la forme , où v est la nouvelle variable, et la formule de la porte est donnée par ϕ , en utilisant les variables pour d'autres portes pour représenter les entrées. Cela peut se faire par une simple traversée (en temps linéaire, ce qui est clairement optimal).( v ↔ ϕ ) v ϕ
Par exemple, si vous avez trois entrées, , x 2 et x 3 , avec des portes ET reliant x 1 et x 2 ainsi que x 2 et x 3 , et une porte OU reliant leurs sorties, vous pouvez introduire trois variables pour représenter les portes - v 1 , v 2 et v 3 , respectivement - et réécrire la formule en ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧X1 X2 X3 X1 X2 X2 X3 v1 v2 v3 Notez que la variable de sortie est incluse explicitement.
Introduction aux algorithmes par Cormen et al. explique cela en détail, dans le chapitre sur NP-Completeness.
la source