Dado um circuito booleano em variáveis (que usa apenas portas NOT, AND e OR), qual é a maneira mais eficiente de extrair a fórmula booleana representada pelo circuito? Existe um algoritmo polytime para esse problema?n
Dado um circuito booleano em variáveis (que usa apenas portas NOT, AND e OR), qual é a maneira mais eficiente de extrair a fórmula booleana representada pelo circuito? Existe um algoritmo polytime para esse problema?n
Respostas:
Se eu entendi sua pergunta corretamente, eu diria que você poderia usar a redução padrão de CIRCUIT-SAT para SAT: represente cada porta como uma nova variável e, em seguida, represente todo o circuito no formato CNF, com cada cláusula no formato , em que é a nova variável, e a fórmula para o portão é fornecida por , usando as variáveis para outros portões para representar as entradas. Isso pode ser feito por uma travessia simples (em tempo linear, o que é claramente ideal).v ϕ
Por exemplo, se você possuir três entradas, , e , com portas AND vinculando e , bem como e , e uma porta OR conectando suas saídas, poderá introduzir três variáveis para representar as portas - , e , respectivamente - e reescreva a fórmula paraObserve que a variável de saída está incluída explicitamente.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
Introdução aos Algoritmos por Cormen et al. explica isso em detalhes, no capítulo NP-Completeness.