多项式时间变换
设判定问题
Ⅱ1=<D1,Y1>,Ⅱ2=<D2,Y2>
.如果函数
f:D1→D2
满足条件:
(1). f是多时相时间可计算的,即存在计算f的多项式时间算法.
(2). 对所有的
I∈D1,I∈Y1⟺f(I)∈Y2
,
D1
中判定输出”Yes”的实例,经过函数
f
的多项式变换,就可以构造成为判定问题
D2
中输出”Yes”的实例,我们称
f是Ⅱ1到Ⅱ2
的多项式时间变换。
如果存在
Ⅱ1
和
Ⅱ2
的多项式时间变换,则称
Ⅱ1
可以多项式时间变换到
Ⅱ2
,记作
Ⅱ1⩽pⅡ2
,其中的p表示polynomial,即多项式。
证明一个问题
Ⅱ2
是NP完全的方法
1.证明
Ⅱ2∈NP
.
2.找到一个已知的NP完全问题
Ⅱ1
,并证明
Ⅱ1⩽pⅡ2
已知的NP完全问题
1.可满足性(SAT)任给一个合取范式F,问F是可满足的吗?
2.最大可满足性:任给关于变元
x1,x2,...,xn
的简单析取式
C1,C2,...,Cm
以及正整数K,问存在关于变元
x1,x2,...,xn
的赋值使得
C1,C2,...,Cm
中至少有K个为真的吗?
利用SAT问题证明3SAT问题是NP完全
1.由于3SAT是SAT问题的特殊情况,所以
3SAT∈NP
.
为了证明3SAT是NP完全问题,即证明
SAT⩽p3SAT
.具体证明如下:
假设任给一个合取范式F,要构造对应的3元合取范式
F′=f(F)
,使得F是可满足的当且仅当
F′
是可满足的,具体构造如下:
设
F=C1⋀C2⋀...⋀Cm
是简单析取式,对应的
F′=F′1⋀F′2⋀...⋀F′m
,其中
F′j
对应于
Cj
,是3元合取范式,并且:
Cj
是可满足的当且仅当
F′j
是可满足的。(*)
下面分情况构造
F′j
,其中
zi
表示文字,即某个变元
xk
或者它的否定
xk¯¯¯¯¯
.
1.
Cj=z1
.引入两个新变元
yj1,yj2
,令
F′j=(z1⋁yj1⋁yj2)⋀(z1⋁yj1¯¯¯¯¯¯⋁yj2)⋀(z1⋁yj1⋁yj2¯¯¯¯¯¯)⋀(z1⋁yj1¯¯¯¯¯¯⋁yj2¯¯¯¯¯¯)
上式中由于
(yj1⋁yj2)
,
(yj1¯¯¯¯¯¯⋁yj2)
,
(yj1⋁yj2¯¯¯¯¯¯)
,
(yj1¯¯¯¯¯¯⋁yj2¯¯¯¯¯¯)
不能同时为真,故
F′j
为真当且仅当
z1=1
,从而(*)式成立。
2.
Cj=z1⋁z2
,引入另外一个变元,令
F′j=(z1⋁z2⋁yj)⋀(z1⋁z2⋁yj¯¯¯¯)
显然当且仅当
z1⋁z2
为真,
F′j
为真,从而(*)式成立。
3.
Cj=z1⋁z2⋁z3
,令
F′j=Cj
,这种情况(*)显然成立
4.
Cj=z1⋁z2⋁...⋁zk,k≥4
引入k-3个新变元
yj1,yj2,...,yj3,
令
F′j=(z1⋁z2⋁yj1)⋀(yj1¯¯¯¯¯¯⋁z3⋁yj2¯¯¯¯¯¯)⋀(y¯¯¯j2⋁z4⋁yj3)⋀...⋀(yj(k−4)¯¯¯¯¯¯¯¯¯¯¯¯¯⋁zk−2⋁yj(k−3))⋀(yj(k−3)¯¯¯¯¯¯¯¯¯¯¯¯¯⋁zk−1⋁zk)
,
要使得
Cj
成立,只需其中
zi=1
即可,
当
i=1
或2时,令
t(yjs)=0(1≤i≤k)
;
当
i=k−1
或k时,令
t(yjs)=1(1≤s≤k−3)
;
当
3≤i≤k−2
时,
zi=1
,此时
yj(i−1)
和
zi
在同一个析取式中,
令
yjs=0
,当
i−1≤s≤k−3
令
yjs=1
,当
1≤s≤i−2
例如当.
Cj=z1⋁z2⋁z3⋁z4⋁z5
引入2个新变元,得到下式:
F′j=(z1⋁z2⋁yj1)⋀(yj1¯¯¯¯¯¯⋁z3⋁yj2)⋀(yj2¯¯¯¯¯¯⋁z4⋁z5)
,
若
zi=1
使得C_j成立,此时若
i=1
或2,则令
yj1=0,yj2=1
。
若
z3=1
使得C_j成立,此时令出现在
z3
之前的变元为1,出现在
z3
之后的变元为0。
若
zi=1
使得C_j成立,此时若
i=4
或5,则令
yji=1
。
当且仅当互为充要条件,因此当SAT成立时,根据上述变换方式可以使得3SAT成立,
而当3SAT成立时,根据其中变元的赋值,可以设置SAT的取值使之满足,因此可以在多项式时间内根据SAT构建出3SAT,因此证明3SAT是多项式NP完全问题。