算法设计与分析之NP完全性

多项式时间变换

设判定问题 1=<D1,Y1>,2=<D2,Y2> Ⅱ 1 =< D 1 , Y 1 > , Ⅱ 2 =< D 2 , Y 2 > .如果函数 f:D1D2 f : D 1 → D 2 满足条件:
(1). f是多时相时间可计算的,即存在计算f的多项式时间算法.
(2). 对所有的 ID1,IY1f(I)Y2 I ∈ D 1 , I ∈ Y 1 ⟺ f ( I ) ∈ Y 2

D1 D 1 中判定输出”Yes”的实例,经过函数 f f 的多项式变换,就可以构造成为判定问题D2中输出”Yes”的实例,我们称 f12 f 是 Ⅱ 1 到 Ⅱ 2 多项式时间变换

如果存在 1 Ⅱ 1 2 Ⅱ 2 的多项式时间变换,则称 1 Ⅱ 1 可以多项式时间变换到 2 Ⅱ 2 ,记作 1p2 Ⅱ 1 ⩽ p Ⅱ 2 ,其中的p表示polynomial,即多项式。

证明一个问题 2 Ⅱ 2 是NP完全的方法

1.证明 2NP Ⅱ 2 ∈ N P .
2.找到一个已知的NP完全问题 1 Ⅱ 1 ,并证明 1p2 Ⅱ 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问题的特殊情况,所以 3SATNP 3 S A T ∈ N P .
为了证明3SAT是NP完全问题,即证明 SATp3SAT S A T ⩽ p 3 S A T .具体证明如下:
假设任给一个合取范式F,要构造对应的3元合取范式 F=f(F) F ′ = f ( F ) ,使得F是可满足的当且仅当 F F ′ 是可满足的,具体构造如下:
F=C1C2...Cm F = C 1 ⋀ C 2 ⋀ . . . ⋀ C m 是简单析取式,对应的 F=F1F2...Fm F ′ = F 1 ′ ⋀ F 2 ′ ⋀ . . . ⋀ F m ′ ,其中 Fj F j ′ 对应于 Cj C j ,是3元合取范式,并且:
Cj C j 是可满足的当且仅当 Fj F j ′ 是可满足的。(*)
下面分情况构造 Fj 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 ,令
Fj=(z1yj1yj2)(z1yj1¯¯¯¯¯¯yj2)(z1yj1yj2¯¯¯¯¯¯)(z1yj1¯¯¯¯¯¯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 ¯ )
上式中由于 (yj1yj2) ( y j 1 ⋁ y j 2 ) , (yj1¯¯¯¯¯¯yj2) ( y j 1 ¯ ⋁ y j 2 ) , (yj1yj2¯¯¯¯¯¯) ( y j 1 ⋁ y j 2 ¯ ) , (yj1¯¯¯¯¯¯yj2¯¯¯¯¯¯) ( y j 1 ¯ ⋁ y j 2 ¯ ) 不能同时为真,故 Fj F j ′ 为真当且仅当 z1=1 z 1 = 1 ,从而(*)式成立。

2. Cj=z1z2 C j = z 1 ⋁ z 2 ,引入另外一个变元,令
Fj=(z1z2yj)(z1z2yj¯¯¯¯) F j ′ = ( z 1 ⋁ z 2 ⋁ y j ) ⋀ ( z 1 ⋁ z 2 ⋁ y j ¯ )
显然当且仅当 z1z2 z 1 ⋁ z 2 为真, Fj F j ′ 为真,从而(*)式成立。

3. Cj=z1z2z3 C j = z 1 ⋁ z 2 ⋁ z 3 ,令 Fj=Cj F j ′ = C j ,这种情况(*)显然成立

4. Cj=z1z2...zk,k4 C j = z 1 ⋁ z 2 ⋁ . . . ⋁ z k , k ≥ 4 引入k-3个新变元 yj1,yj2,...,yj3, y j 1 , y j 2 , . . . , y j 3 ,
Fj=(z1z2yj1)(yj1¯¯¯¯¯¯z3yj2¯¯¯¯¯¯)(y¯¯¯j2z4yj3)...(yj(k4)¯¯¯¯¯¯¯¯¯¯¯¯¯zk2yj(k3))(yj(k3)¯¯¯¯¯¯¯¯¯¯¯¯¯zk1zk) 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(1ik) t ( y j s ) = 0 ( 1 ≤ i ≤ k ) ;
i=k1 i = k − 1 或k时,令 t(yjs)=1(1sk3) t ( y j s ) = 1 ( 1 ≤ s ≤ k − 3 ) ;
3ik2 3 ≤ i ≤ k − 2 时, zi=1 z i = 1 ,此时 yj(i1) y j ( i − 1 ) zi z i 在同一个析取式中,

yjs=0 y j s = 0 ,当 i1sk3 i − 1 ≤ s ≤ k − 3
yjs=1 y j s = 1 ,当 1si2 1 ≤ s ≤ i − 2

例如当. Cj=z1z2z3z4z5 C j = z 1 ⋁ z 2 ⋁ z 3 ⋁ z 4 ⋁ z 5 引入2个新变元,得到下式:
Fj=(z1z2yj1)(yj1¯¯¯¯¯¯z3yj2)(yj2¯¯¯¯¯¯z4z5) 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完全问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值