Dado un circuito booleano en variables (que usa solo compuertas NOT, AND y OR), ¿cuál es la forma más eficiente de extraer la fórmula booleana representada por el circuito? ¿Existe un algoritmo polytime para este problema?n
Dado un circuito booleano en variables (que usa solo compuertas NOT, AND y OR), ¿cuál es la forma más eficiente de extraer la fórmula booleana representada por el circuito? ¿Existe un algoritmo polytime para este problema?n
Respuestas:
Si entiendo su pregunta correctamente, diría que podría usar la reducción estándar de CIRCUIT-SAT a SAT: represente cada puerta como una nueva variable, y luego represente todo el circuito en forma CNF, con cada cláusula que tiene la forma , donde v es la nueva variable, y la fórmula para la puerta está dada por ϕ , usando las variables para otras puertas para representar las entradas. Esto puede hacerse mediante un recorrido simple (en tiempo lineal, que es claramente óptimo).
Por ejemplo, si tiene tres entradas, , x 2 y x 3 , con puertas AND que unen x 1 y x 2 , así como x 2 y x 3 , y una puerta OR que une sus salidas, puede introducir tres variables para representar las puertas ( v 1 , v 2 y v 3 , respectivamente) y reescribir la fórmula a ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧Tenga en cuenta que la variable de salida se incluye explícitamente.
Introducción a los algoritmos por Cormen et al. explica esto en detalle, en el capítulo sobre NP-Completeness.