Dato un circuito booleano su variabili (che utilizza solo le porte NOT, AND e OR), qual è il modo più efficiente per estrarre la formula booleana rappresentata dal circuito? Esiste un algoritmo polytime per questo problema?n
Dato un circuito booleano su variabili (che utilizza solo le porte NOT, AND e OR), qual è il modo più efficiente per estrarre la formula booleana rappresentata dal circuito? Esiste un algoritmo polytime per questo problema?n
Risposte:
Se capisco correttamente la tua domanda, direi che potresti usare la riduzione standard da CIRCUIT-SAT a SAT: Rappresenta ogni gate come una nuova variabile, e quindi rappresenta l'intero circuito in forma CNF, con ogni clausola che ha la forma , dove è la nuova variabile e la formula per il gate è data da , usando le variabili di altre porte per rappresentare gli input. Questo può essere fatto con un semplice attraversamento (in tempo lineare, che è chiaramente ottimale).v ϕ
Ad esempio, se hai tre input, , e , con le porte AND che collegano e nonché e e una porta OR che collega le loro uscite, puoi introdurre tre variabili per rappresentare le porte: , e , rispettivamente: e riscrivi la formula inSi noti che la variabile di output è inclusa esplicitamente.x 2 x 3 x 1 x 2 x 2 x 3 v 1 v 2 v 3 ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧ ( v 2 ↔ ( x 2 ∧ x 3 ) ) ∧ ( v 3 ↔ ( v 1 ∨ v 2 ) ) ∧ v 3
Introduzione agli algoritmi di Cormen et al. spiega questo in dettaglio, nel capitolo sulla completezza NP.