算法分析与设计(证明NPC问题的方法)

一、限制&约束(restrict)

1)说明对于问题A有一个已知的NPC问题B作为其特殊实例;

2)对于问题A增加某些限制使其为NPC问题;

(前者是证明有一个特殊的NPC实例,后者是追加限制使得其为NPC问题)

注:此方法是证明NPC问题最简单、最常用的方法;

二、局部替换(local replacement)

1)选取一个已知的正确的NPC问题,作为证明另一个问题的基础单元;

2)根据目标实例,将对应的基础单元部分变换(局部替换)成目标证明实例;

在之前证明的SAT规约为3SAT就是使用的局部替换的方式;

三、组件设计(component design)

设计特定的组件去证明,通常主要由三种类型的组件

1)选择组件; 2)测试组件; 3)通信(连接)组件; 

在之前由3SAT规约VC的时候就是通过组件设计来证明的,其直线边,联络边,三角边分别对应上述组件;

四、通常证明一个问题是NPC的过程

1)定义证明:对于NPC问题集合中的任意问题P’,存在一个多项式时间转换(归约)将P’转换(归约)为P。

2)从一个已知的NPC问题在多项式时间内转换(归约)到P。

1.证明P属于NP问题。(通常问题都可以在多项式时间内得到验证

2.选取一个已知的NPC问题P’。(SAT为起点

3.建立一个从P’到P的转换(归约)。 

4.证明转换(归约)是多项式转换(归约)。(证明可以在多项式时间内变换,且变化前后等价

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

猜你喜欢

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