写在前面,本题目来自《算法概论》(加州大学伯利克利分校 著)第八章 Exercises 8.3
原题目:STINGY SAT is the following problem: given a set of clauses(each a disjunction of literals) and an integer k, find a satisfying assignment in which at most k variable are true, if such an assignment exits, Prove that STINGY SAT is NP-complete.
翻译:题目大意是,STINGY SAT 问题是:给定一组子句(每个子句都是包含于其中的多个文字的析取(也就是逻辑或))和整数k,如果存在这样的赋值,找出一组最多只有k个变量为true的可满足赋值。证明STINGY SAT 是NP-完全问题。阅读本题前的要求
- P和NP,NP-完全问题的概念
- 规约的概念
- 搜索问题的互相规约
解:
1. 首先证明STINGY SAT 是一个NP问题:假如存在一个STINGY SAT的解S,显然我们可以在多项式的时间内验证该解S的正确性,因此STINGY SAT是一个NP问题(见NP问题的定义)
2. 我们知道SAT是一个NP-完全问题,如果SAT可以规约到STINGY SAT,那么STINGY SAT就是一个NP-完全问题(规约的传递性)
3. 规约过程:假设SAT有n个变量,SAT等价于k==n的STINGY SAT,因此SAT可以规约到STINGY SAT。
4. 综上,STINGY SAT是一个NP-完全问题。