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