算法分析与设计(NPC问题)

一、问题难证明(难解)的原因

1)问题是难解,只能在指数时间内找到问题的解决方案;(问题是复杂

2)问题的解法长度超过了对应输入的任意一个多项式方法;(问题规模大,语句频度

二、决策问题(decision problem)

定义:结果只回答“是”或‘否’的问题称为决策性问题;

组成部分:1)问题名称; 2)问题实例; 3)基于问题实例提出是(否)问题;

三、P问题&NP问题&NPC问题(多项式问题,非确定性多项式问题)

P问题定义:可以在多项式时间内解决的问题(可以用一个确定的多项式算法求解);

NP问题定义:存在一个非确定性多项式算法的问题(可以用一个确定算法在多项式时间内检查或验证出它们的解);

(非确定性多项式算法:算法的每一步都面临着选择,对选择的内容时不明确的且在多项式时间内完成)

特殊的:P问题是NP问题的子集,说明并不是所有的NP问题都是难解的;

NPC问题定义:在NP问题中难解的问题;

图灵规约(Turing):对于给定的两个问题A和B,如果对于求解问题A的一个算法可以作为求解问题B的算法的子程序,

则称问题A图灵规约到问题B;

扫描二维码关注公众号,回复: 9545206 查看本文章

Karp规约:对于给定的两个问题A和B,如果存在一个变换T,满足变换前后存在等价关系,I∈YA<=>T(I)∈YB

则称此变换T为问题A到问题B的Karp规约;

四、NPC问题(A)的证明

1) 通过NPC的定义去证明:证明对于任意一个NPC问题存在一个多项式变换T将其变换为带证明问题A;

2) 通过一个已知NPC问题(SAT问题)进行多项式变换T到带证明问题A;

步骤:证明A是NP问题; 选取一个已知的NPC问题B; 构造B到A的变换T;证明变换T是多项式变换且变换前后等价;

几种基本的NPC问题:(如下图所示,从SAT问题开始证明)

即:对于SAT和3SAT问题的区别就是对于Ci是由不同个数变量组成的析取范式(SAT为任意个数,3SAT约束为3个) 

按照上述的证明步骤:

1) 对于3SAT问题,对于每一个变量进行赋值验证每一个子句Ci为真值即可,显然可以在多项式时间内完成,

故3SAT属于NP问题;

2) 选取一个已知的NPC问题,在这里我们选取SAT问题作为进行变换的基础;

3) 找出从SAT到3SAT的一个变换并证明此变换为多项式变换;

因为SAT中CI个数不唯一,在这里将其分为上述四种情况进行讨论(对应的每一种情况均满足3SAT) ,说明SAT到3SAT

存在一个变换,现在在证明此变换为多项式变换且可以在多项式时间内完成。

对于每一个子句Ci,由上述的4情况显示最多增加k-3个变量,则对于SAT的m个子句,最多增加m(k-3)个变量,

由此可以显然特征此变换为多项式变换;

先证明当SAT为真时,3SAT也为真:

(分为三种情况:前两个为真,后两个为真,中间部分的任意一个为真) 

在证明当3SAT为真时SAT为真(这里采用反证法,假设SAT为假,3SAT为真推出矛盾即可)

发布了79 篇原创文章 · 获赞 81 · 访问量 5718

猜你喜欢

转载自blog.csdn.net/weixin_44638960/article/details/103552215