Algorithms-Exercise 8.3 Proof
STINGY SAT is the following problem: given a set of clauses (each a disjunction of literals) and an integer , find 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 是这样的一种问题:给定一系列的子句(clause),另外还有一个整数k,要求找到一组包含最多k个变量(variable)为真值(true)的可满足的赋值(satisfying assignment)。
前导知识
我们先介绍几个知识点。
数理逻辑
在数理逻辑里面,有几个名词:
- 变量(variable):比如
x,y,z
- 文字(literal):变量或者变量的非,比如
x,x¯,y,y¯,z,z¯
- 子句(clause):由文字(literal)之间的析取(disjunction)构成,比如
(x∨y∨z),(x¯∨y∨z)
- 公式(formula):由子句之间的合取构成,如
(x∨y∨z)∧(x¯∨y∨z)
SAT
SAT(satisfiability)问题是指为一个公式找到一组变量的赋值,使得公式的值为真值。也就是说,令公式的每个子句的值都为真值。
NP
NP(Nondeterministic Polynomial)表示一类能在多项式时间内,用非确定性算法解决的判定问题(“猜测”+“验证”)。
人们把NP类的问题中分出复杂性最高的一个子类,把它叫做NP完全类(NP-Complete)。我们知道SAT问题是NP完全的。
证明
我们要证明STINGY SAT 是一个NP完全的问题的话,首先要说明它是一个NP问题。显然地,存在一种非确定性算法,为少于或等于k个变量赋真值,从而检验公式的值是否为真。
下面我们想证明可以把SAT规约到STINGY SAT。
假设SAT的公式是
f
,其中包含k个变量,同时我们也假设STINGY SAT的公式也是
充分条件证明
假如一组变量的赋值
S
是关于k个变量的
必要条件证明
假如一组变量的赋值
S
是关于