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

多项式时间变换

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

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

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

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

1.证明 2 N P .
2.找到一个已知的NP完全问题 1 ,并证明 1 p 2

已知的NP完全问题

1.可满足性(SAT)任给一个合取范式F,问F是可满足的吗?

2.最大可满足性:任给关于变元 x 1 , x 2 , . . . , x n 的简单析取式 C 1 , C 2 , . . . , C m 以及正整数K,问存在关于变元 x 1 , x 2 , . . . , x n 的赋值使得 C 1 , C 2 , . . . , C m 中至少有K个为真的吗?

利用SAT问题证明3SAT问题是NP完全
1.由于3SAT是SAT问题的特殊情况,所以 3 S A T N P .
为了证明3SAT是NP完全问题,即证明 S A T p 3 S A T .具体证明如下:
假设任给一个合取范式F,要构造对应的3元合取范式 F = f ( F ) ,使得F是可满足的当且仅当 F 是可满足的,具体构造如下:
F = C 1 C 2 . . . C m 是简单析取式,对应的 F = F 1 F 2 . . . F m ,其中 F j 对应于 C j ,是3元合取范式,并且:
C j 是可满足的当且仅当 F j 是可满足的。(*)
下面分情况构造 F j ,其中 z i 表示文字,即某个变元 x k 或者它的否定 x k ¯ .
1. C j = z 1 .引入两个新变元 y j 1 , y j 2 ,令
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 ¯ )
上式中由于 ( y j 1 y j 2 ) , ( y j 1 ¯ y j 2 ) , ( y j 1 y j 2 ¯ ) , ( y j 1 ¯ y j 2 ¯ ) 不能同时为真,故 F j 为真当且仅当 z 1 = 1 ,从而(*)式成立。

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

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

4. C j = z 1 z 2 . . . z k , k 4 引入k-3个新变元 y j 1 , y j 2 , . . . , y j 3 ,
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 ) ,
要使得 C j 成立,只需其中 z i = 1 即可,
i = 1 或2时,令 t ( y j s ) = 0 ( 1 i k ) ;
i = k 1 或k时,令 t ( y j s ) = 1 ( 1 s k 3 ) ;
3 i k 2 时, z i = 1 ,此时 y j ( i 1 ) z i 在同一个析取式中,

y j s = 0 ,当 i 1 s k 3
y j s = 1 ,当 1 s i 2

例如当. C j = z 1 z 2 z 3 z 4 z 5 引入2个新变元,得到下式:
F j = ( z 1 z 2 y j 1 ) ( y j 1 ¯ z 3 y j 2 ) ( y j 2 ¯ z 4 z 5 ) ,
z i = 1 使得C_j成立,此时若 i = 1 或2,则令 y j 1 = 0 , y j 2 = 1
z 3 = 1 使得C_j成立,此时令出现在 z 3 之前的变元为1,出现在 z 3 之后的变元为0。
z i = 1 使得C_j成立,此时若 i = 4 或5,则令 y j i = 1

当且仅当互为充要条件,因此当SAT成立时,根据上述变换方式可以使得3SAT成立,
而当3SAT成立时,根据其中变元的赋值,可以设置SAT的取值使之满足,因此可以在多项式时间内根据SAT构建出3SAT,因此证明3SAT是多项式NP完全问题。

猜你喜欢

转载自blog.csdn.net/t46414704152abc/article/details/79464502