NP完全理论


目录

             一:多项式时间规约 

             二:SAT相关问题

             三:团问题

            四:把3-SAT问题归约到团问题(​)

            五:NPC与NP-hard

            六:几个npc问题

                          证明:独立集是NPC问题  

                          证明:顶点覆盖是npc问题


一:多项式时间规约 

def:多项式时间可计算函数

              若存在多项式时间图灵机M,使得在任何输入w上,M停机时f(w)恰好在带上,则称函数:

f:\sum *\rightarrow \sum *为---多项式时间可计算函数。

def:多项式时间规约

             语言A可多项式时间(映射)归约到语言B,记为:A\leq _{P}B   :

             \exists多项式时间可计算函数f,对于每一个输入w,w\in A\Leftrightarrow f(w)\in B,

              这样的函数f成为A到B的多项式时间归约。

通俗来说:A和B分别是输入空间U_{1}U_{2}的两个语言,如果存在一个多项式的时间算法,该算法可是将每个输入u_{1\in }U_{1}转换成另一个输入u_{2}\in U_{2},使得:u_{1\in }U_{1}\Leftrightarrow u_{2\in }U_{2},则可称:A可以多项式时间归约到B.

多项式归约的性质

1:(映射的性质)

2:封闭性:

    ①:

           PF:设M是判定B的多项式时间算法,f:是A到B的多项式归约。

          判定A的多项式算法算法N如下:

           N="对输入的w:

                 1)计算f(w);

                 2)在输入f(w)上运行M,输出M的输出。"

          因为f:是A到B的多项式归约,故:w\inA,则f(w)\inB.只要w\inA,M接受f(w).

         这两步都在多项式时间内完成。

    ②:

二:SAT相关问题

1:

2: ①文字:布尔变元及其否定 

    ②子句:文字的析取(\vee)   

    ③合取范式(cnf):子句的合取

                   

           

3:三元合取范式(3sat):每个子句中三个文字,由三个子句组成。

       

TH:合取范式可归约性为三元合取范式

(同时可满足,但不等价)

三:团问题

              

K团:顶点数为K的完全子图。

三团:{1,2,4},{1,3,4},{3,4,5}。。。。

四:把3-SAT问题归约到团问题(\bigstar)

把一个公式转化成一个图,公式的可满足性赋值对应图中指定大小的团。

其中:图的结构依赖于变量和子句。

如:

(最后)

(从图中每找一个三角形然后令三个顶点值为真,则该赋值会使布尔公式值问为真)

证明:

1:构造映射

记归约函数为f.设:,k为子句个数。

f(\phi )=,G=    V={a_{1},b_{1},c_{1},...,a_{k},b_{k},c_{k}}     E={(x_{i},y_{j})|i\neqj\Lambda x_{i}不是y_{j}的否定}。

2:正确性证明

\phi是可满足的\LeftrightarrowG有k团

\Rightarrow可满足赋值给每个赋值至少有一个为真,每组取为真的顶点构成k团。

\Leftarrowk团必须从每个子句选择一个文字,让文字值为1,最后的赋值就为真。

复杂度分析:

 

每步计算花费O(k),确定顶点。总时间:O(k^{4})

五:NPC与NP-hard

定义:如果语言B满足下面两个条件,则称B是NP完全的:

  • 1.B属于NP
  • 2.NP中每个A都可以多项式时间可规约未B

 (要求每一个A:\forall A)

当只满足条件2时称B是NPH问题:

 (会证明)

TH:SAT问题是NP完全的(大部分npc问题的归约选择)

六:几个npc问题

证明:独立集是NPC问题  

无向图的独立集 , 指的是在无向图中找到点集的子集 , 使得它们两两之间 , 没有边相连 ;

(最后)

pf:

1:图的构造:

对于每一个子句a\vee b\vee c构造k_{3}子图,将每组的文字x与其他组的非x连接一边。

2:正确性证明:

\Rightarrow当赋值使得3-SAT值为真时,必从每个k_{3}子图中选择一个顶点,由于每组的文字x与其他组的非x连接一边,故选取的顶点不会与其他组的顶点有边相连(否则赋值矛盾),构成独立集。

\Leftarrow当选取顶点构成独立集,使得选取顶点赋值为真,则每个子句值为真,所有子句取交集后值为真,赋值可满足。

证明:顶点覆盖是npc问题

 

顶点覆盖:一组顶点集合,图的所有边至少有一端连在这组顶点中的一个。 

最后:

结论:设语句有n个文字,m个语句,F是可满足的当且仅当图中有顶点数不超过K = n + 2m 的顶点覆盖。

1:x_{i}和!x_{i}中,必有一个为1,上面的变元构件组成的边集E1总能被覆盖掉,此时选了n个顶点了

2:为了覆盖下面三角形的三条边(边集E2),最少得选两个顶点。上一步中,上面选到的点连到三角形中的某个顶点,该顶点就不再考虑了,选剩下的两个点,这样能保证边集E3也能同时完成覆盖。这样又选了2m个点,一共是n + 2m个完成了覆盖。

如:取x_{1}=0,x_{2}=1

pf:

1:构造 

f(\phi )=,\phi有m个不同变元,n个子句。

G有2m+3n顶点,k=m+2n.

对每个变元x,{x,!x}构成一个k_{2}子图;对于每一个子句a\vee b\vee c构造k_{3}子图.

连接所有k_{2}子图与k_{3}子图的相同变元。

2:正确性证明

\Rightarrow把每个构件真赋值放入覆盖,选取子句中的其余两个顶点放入覆盖,构成一个点覆盖。

\Leftarrow每个顶点覆盖必须包含每对组件中的一个和每个三角形的至少两个顶点,把构件中的赋值设为真,因为每个子句中必有一个顶点的边被构件变元相连,从而3SAT可满足。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值