让武器让位于长袍吧。
Definition: Say a language L is sparse if:
∀n∈N,∣L∩{0,1}n∣≤O(nc)
for some constant c。
这个定义了什么是 “稀疏” 的语言。直观地说,就是L 中长度为n 的字符串数量至多是n 的多项式级别。
考虑如下定理:
Mahaney’s Theorem: Assume P=NP, then for all NP-hard language L, L is NOT sparse.
在证明之前,我们先考虑这个定理说明了什么,它实际上刻画了NP-hard 语言的 “难度”。有人曾猜测:
对于一个NP-hard 的语言,是否存在一个多项式算法,使得对 “大多数” 情况都是正确的?
Mahaney’s Theorem 就否定了这种猜测。它说明,NP-hard 的语言确实是难的,并且不存在 “大多数情况正确” 的可能。
下面我们证明这个定理。反设存在一个这样的语言L,那么我们证明SAT∈P,那么就可得出P=NP 与假设矛盾。
因为L∈NP-hard,故存在多项式规约R,使得:
SAT≤mpL
类似 Ladner’s Theorem,既然规约是多项式时间的,故规约的结果长度最多也是多项式级的:
∀ϕ∈{0,1}n,∣R(ϕ)∣≤∣ϕ∣r
当然,上式并不完全严谨,右侧应为O(∣ϕ∣r),但多项式意义下不影响证明的思想。
我们考虑 “规约” 的含义,有:
{ϕ∈SAT⇔R(ϕ)∈Lϕ∈/SAT⇔R(ϕ)∈/L
对于一个输入ϕ∈{0,1}n,那么有R(ϕ)∈{0,1}nr。
R 是一个从长为n 的字符串集,向长为nr 的字符串集的一个多项式函数。而因为假设L 是 sparse 的:
∣L∩{0,1}nr∣≤(nr)c=nrc
所以我们知道L 中长度为nr 的字符串数量是关于n 的多项式级别。即∣L∣≤nrc。(同理为了方便不适用大O 符号,以及我们只考虑了长度为nr 的字符串,因为我们是在R 的像集中讨论的)
那么这个规约配合上 sparse 就会有很好的性质。记T=nrc+1,那么对多项式个的一组输入:
ϕ0,ϕ1,...,ϕT
和它们规约的结果:
R(ϕ0),R(ϕ1),...,R(ϕT)
下面两种情况必然有一个成立:
- R(ϕi) 各不相同。那么根据抽屉原理,存在一个R(ϕi)∈/L。
- 存在R(ϕi)=R(ϕj)。此时,ϕi 和ϕj 要么同时可满足,要么都不可满足。
有了上述性质,我们可以开始着手多项式时间解决SAT 问题。
我们递归地去解决,对于一个输入ϕ∈{0,1}n,我们要判定它是否可满足,可以先把第一个变量赋值为 0 和 1,得到新的SAT 问题ϕx1=0,ϕx1=1 然后如果有一个分支是可满足的,就输出 1,否则为 0。
ϕ→⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ϕx1=0→⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧ϕx1=0,x2=0→{......ϕx1=0,x2=1→{......ϕx1=1→⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧ϕx1=1,x2=0→{......ϕx1=1,x2=1→{......
显然这是一个完全二叉树,就是在枚举,是指数级别的复杂度。
但是我们可以证明,当分支过多时,我们可以用之前的性质在多项式时间内进行剪枝,保证分支数量≤T。
譬如此时有分支ϕ0,...,ϕT,数量大于T 了。此时我们:
- 构造ψ1=ϕ0∨ϕ1,...,ψT=ϕ0∨ϕT。
- 计算规约R(ψ1),...,R(ψT)。可以判断会有两种情况:
- R(ψ1),...,R(ψT) 互不相同。此时我们知道存在R(ψi)∈/L,即ψi=ϕ0∨ϕi 不可满足。尽管我们不知道是哪个i,但是显然共同点是ϕ0 都不可满足。故我们剔除ϕ0。
- 若存在R(ψi)=R(ψj)。那同样显然,我们把ϕi 和ϕj 剔除一个即可。因为它们有相同的可满足性。
综上,若共有n 个变量,输入串长度也是n 级别,而且分支数量始终保持在T=nrc+1 级别(关于n 多项式级别),故得到了一个多项式求解算法,矛盾。故证毕