8.3. STINGY SAT is the following problem: given a set of clauses (each a disjunction of literals) and an integer k, and a satisfying assignment in which at most k variables are true, if such an assignment exists. Prove that STINGY SAT is NP-complete.
由题意可以知道,STINGY SAT就是在原本SAT的要求下(每一个clause都有一个literal为True),另外要求最多只能有k个变量为true。比如一个合取范式的变量有x,y,z三个,k=2,那么就只能在x,y,z中选最多两个变量为整,然后在这种前提下,assignment能否满足SAT。
按照书上第二节给出的定义,我们的证明需要两个大步骤,就可以说明STINGY SAT是一个NP-完全问题。第一步证明STINGY SAT是一个NP问题,第二步证明STINGY SAT能够规约到SAT上,因为SAT本身是一个NP-完全问题。以下给出证明:
Step1:假设(f,k)为吝啬SAT的一个实例,x为一组赋值,也就是说,f是SAT的一个实例(包含k个变量),由于x是否可以使(f,k)为真的解是可在多项式时间内验证的,所以STINGY SAT是NP问题。
Step2:SAT规约到STINGY SAT,即证:
x是f的解 当且仅当 x是(f,k)的解。
Step3:假设x是f的解,则至多有k个变量为真,x赋给(f,k)也为真,所以x是(f,k)的解
Step4:假设x是(f,k)的解,显然x也是f的解。
证毕。
STINGY SAT是NP-完全问题。