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 variables are true, if such an assignment exists. Prove that STINGY SAT is NP-complete.
在进行证明之前首先给出几个相关定义:
P类问题:在一个由问题构成的集合中,如果每个问题都存在多项式级复杂度的算法,这个集合就是 P 类问题
NP 类问题:能在多项式时间内检验一个解是否正确的问题。NP
类问题也等价为能在多项式时间内猜出一个解的问题。这里的“猜”指的是如果有解,那每次都能在很多种可能的选择中运气极佳地选择正确的一步。NPC问题:不同的 NP 问题之间也会出现可归约的关系,甚至存在这么一类(不只是一个)问题,使得任何其它的 NP
问题都能归约到它们上。也就是说,能够解决它们的算法就能够解决所有其它的 NP 问题。这一类问题就是 NPC 问题。
我们已知SAT问题是NPC问题,那么要证明Stingy SAT是NPC问题,只需要将SAT问题归约到Stingy SAT问题,也就是说,证明解决了Stingy SAT问题就可以解决SAT问题,证明如下:
给定一个SAT的问题实例I,令(I, k)为有k个变量的STINGY SAT问题实例。我们可以证明,一组赋值S是I的解当且仅当S也是(I, k)的解。
必要性:假设S为I的解,那么因为一共只有k个变量,所以S中也有不超过k个变量可为真。所以S也是(I, k)的解。
充分性:假设S是(I, k)的解,那么显然它也是对应I的解。