Учитывая булеву схему для переменных (которая использует только вентили NOT, AND и OR), каков наиболее эффективный способ извлечь логическую формулу, представленную схемой? Есть ли алгоритм Polytime для этой проблемы?n
Учитывая булеву схему для переменных (которая использует только вентили NOT, AND и OR), каков наиболее эффективный способ извлечь логическую формулу, представленную схемой? Есть ли алгоритм Polytime для этой проблемы?n
Ответы:
Если я правильно понимаю ваш вопрос, я бы сказал, что вы можете использовать стандартное сокращение от CIRCUIT-SAT до SAT: представлять каждый вентиль как новую переменную, а затем представлять всю схему в форме CNF, причем каждое предложение имеет форму , где v - новая переменная, а формула для ворот задается как ϕ , используя переменные для других вентилей для представления входных данных. Это можно сделать простым обходом (за линейное время, которое явно оптимально).
Например, если у вас есть три входа, , x 2 и x 3 , с вентилями AND, связывающими x 1 и x 2, а также x 2 и x 3 , и вентилем OR, связывающим их выходы, вы можете ввести три переменные представить ворота - v 1 , v 2 и v 3 соответственно - и переписать формулу в ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧Обратите внимание, что выходная переменная включена явно.
Введение в алгоритмы Cormen et al. объясняет это подробно, в главе о NP-полноте.