一、限制&约束(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.证明转换(归约)是多项式转换(归约)。(证明可以在多项式时间内变换,且变化前后等价)