Cho một mạch boolean trên n biến (chỉ sử dụng cổng NOT, AND và OR), cách hiệu quả nhất để trích xuất công thức boolean được đại diện bởi mạch là gì? Có một thuật toán polytime cho vấn đề này?
Cho một mạch boolean trên n biến (chỉ sử dụng cổng NOT, AND và OR), cách hiệu quả nhất để trích xuất công thức boolean được đại diện bởi mạch là gì? Có một thuật toán polytime cho vấn đề này?
Câu trả lời:
Nếu tôi hiểu chính xác câu hỏi của bạn, tôi sẽ nói rằng bạn có thể sử dụng mức giảm tiêu chuẩn từ CIRCUIT-SAT sang SAT: Biểu diễn mỗi cổng như một biến mới, sau đó biểu diễn toàn bộ mạch ở dạng CNF, với mỗi mệnh đề có dạng , nơi v là biến mới, và các công thức cho cổng được cho bởi φ , sử dụng các biến cho cửa khác để đại diện cho các đầu vào. Điều này có thể được thực hiện bằng cách truyền tải đơn giản (trong thời gian tuyến tính, rõ ràng là tối ưu).
Ví dụ: nếu bạn có ba đầu vào , x 2 và x 3 , với các cổng AND liên kết x 1 và x 2 cũng như x 2 và x 3 và một cổng OR liên kết đầu ra của chúng, bạn có thể đưa ra ba biến để đại diện cho gates- v 1 , v 2 , và v 3 , tương ứng và viết lại các công thức để ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧Lưu ý rằng biến đầu ra được bao gồm rõ ràng.
Giới thiệu về thuật toán của Cormen et al. giải thích điều này một cách chi tiết, trong chương về NP-Complete.