NP-完全性介绍

【0】README

0.1) 本文总结于 数据结构与算法分析, 旨在 理解 “NP-完全性” 的idea ;

【1】难与易

1.1)不可判定问题:正如实数不足以表示 x^2 < 0 的解那样,可以证明, 计算机不可能解决碰巧发生的每一个问题,这些不可能解出的问题叫做不可判定问题;
1.2)停机问题:一个特殊的不可判定问题是 停机问题——是否能够让你的C 编译器拥有一个附加的特性,即不仅能够检查语法错误,而且还能够检查所有的无线循环?
1.3)递归不可判定问题:上述问题之所以是不可判定问题的原因在于, 这样一个程序可能很难检查它自己, 由于这个原因, 有时这些问题叫做是 递归不可判定的;

【2】NP类问题

2.0)网络转载:

  • 2.0.1)P类问题定义: 如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么该问题就是P类问题;
  • 2.0.2)NP问题定义:指可以在多项式的时间里验证一个解的问题, 也可以说:可以在多项式的时间里, 猜出解的问题;(通常,我们找一个解很困难,但是验证一个解却很容易, 验证一个解只需要花费O(n)的时间复杂度, 也就是说我们可以花 O(n)的时间吧我猜的路径长度加起来);
    • 2.0.2.1)为什么要定义NP问题? 是因为通常只有NP问题才能找到多项式的时间可以解决的算法, 所以P类问题属于NP类问题;
    • 2.0.2.2)人们普遍认为 P≠NP类问题: 就是因为在研究NP问题的过程中 找出一类非常特殊的NP问题——NPC类问题(NP完全问题);
  • 2.0.3)NPC问题(NP完全问题)定义:存在这样一个NP问题, 所有的NP问题都可以约化到它。 换句话说, 只要解决了这个问题,那么所有的NP类问题都解决了。这样的NP类问题不止一个,是一类, 这一类问题就叫做NPC问题(NP完全问题);

2.1)NP定义: NP代表非确定型多项式时间(nondeterministic polynomimal-time), NP类问题在难度上 逊色于不可判定问题的类;
2.2)确定型机器和非确定型机器:

  • 2.2.1)确定型机器: 它在每一时刻都在执行一条指令。根据这条指令, 机器再去执行某条接下来的指令,这是唯一可以确定的;
  • 2.2.2)非确定型机器:而一台非确定型机器对其后的步骤是有选择的。它可以自由进行它想要的任意的选择, 如果这些后面的步骤中有一条导致问题的解,那么它将总是选择这个正确的步骤。因此,非确定型机器具有非常好的猜测(优化)能力;

2.3)如何检验一个问题是否属于 NP 的简单方法是用 是否问题(yes/no) 的语言描述该问题?
如果我们在多项式时间内能够证明一个问题的任意“是”的实例是正确的, 那么该问题属于NP类问题;以哈密尔顿圈问题为荔枝, 一个“是”的实例就是图中任意一个包含所有顶点的简单回路, 由于给定一条路径,验证它是否真的是哈密尔顿是一件简单的事情, 所以哈密尔顿圈问题是 NP类问题;
Attention)不是所有的可判定问题都属于NP类问题。 考虑确定一个图是否(没有哈密尔顿圈)的问题。证明一个图有哈密尔顿圈时相对简单的一件事情——我们只需要展示一个即可。然后却没有人知道如何以多项式时间证明一个图没有哈密尔顿圈。似乎人们只能枚举所有的圈并且将它们一个一个地验证才行。因此,无哈密尔顿圈 的问题不知道属不属于 NP类问题;

【3】NP完全问题

3.1)NPC问题(NP完全问题)的定义:存在这样一个NP问题, 所有的NP问题都可以规约到它。 换句话说, 只要解决了这类问题,那么所有的NP类问题都解决了。这样的NP类问题不止一个,是一类, 这一类问题就叫做NPC问题(NP完全问题);
3.2)如何将问题P1规约到P2:

  • 3.2.1)规约描述: 设有一个映射, 使得P1 的任何实例都可以变换成P2 的一个实例。求解P2, 然后将答案映射回原始的解答。
  • 3.2.2)看个荔枝: 考虑吧数以10进制输入到一个计算器中,将这些10进制数转化成2进制数,所有的计算都用2进制进行。然后, 再把最后答案转变成十进制显示。对于可多项式地归约成P2的P1, 与变换相联系的所有的工作必然以多项式时间完成;

3.3)NP完全问题是最难的NP问题的原因在于: 一个NP完全问题基本上可以用作NP中任何问题的子程序, 其花费只不过是多项式的开销量;因此,如果任意NP完全问题有一个多项式时间的解, 那么NP中的每一个问题必然都有一个多项式时间的解。这使得NP完全问题是所有NP问题中最难的问题;
3.4)设我们有一个NP完全问题P1, 并设P2已知属于NP, 证明P2也是NPC类问题。再进一步假设P1多项式地归约成P2, 使得我们可以通过使用P2求解P1而只多损耗了 多项式时间。由于P1是NP完全问题的, NP中的每一个问题都可以多项式地归约成P1。应用多项式的封闭性, 我们看到, NP中的每一个问题均可归约成P2: 我们把问题归约成P1, 然后再把P1归约到P2, 因此P2是NP完全的;

3.5)巡回售货员问题:

  • 3.5.1)问题定义: 给定一完全图G=(V, E), 它的边的值以及整数K, 是否存在一个访问所有顶点并且 总值<= K 的简单圈?
  • 3.5.2)巡回售货员问题的应用: 印刷电路板需要穿一些孔使得芯片、电阻器和其它的电子元件可以置入;定位所需要的时间依赖于从孔到孔间行进的距离, 定位的时间越少越好;
  • 3.5.3)巡回售货员是NPC(NP完全)问题。如何证明它是NPC问题?
    为了证明它是NPC的, 我们可多项式地将哈密尔顿圈问题归约到巡回售货员问题。为此,可以构造一个新的图G’, G’ 和 G 有相同的顶点。对于G’ 的每一条边(v, w), 如果(v, w)属于G, 那么它就有权1, 否则权2;容易验证, G有一个 哈密尔顿圈当且仅当G’ 有一个总权为 |V| 的巡回售货员的巡回路线(如下图所示);

3.6)如何证明某个新问题是NP完全的? 必须证明它属于NP, 然后将一个适当的NPC问题变换到该问题;
3.7)我们不禁要问:第一个NPC问题是如何具体地被证明是NPC(NP完全)的;
3.8)引入可满足性问题:第一个被证明是NPC问题的是 可满足性问题, 这个可满足性问题吧一个布尔表达式作为输入并提问是否该表达式对式中各变量的一次赋值取值为1;

3.9)证明可满足性问题是NPC的: 在1971年,Cook通过直接证明NP中的所有问题都可以变换成可满足性问题而证明了可满足性问题是 NP完全的;为此,Cook用到了对NP中每一个问题都已知的事实: NP中的每一个问题都可以用一台非确定型计算机在多项式时间内求解;
3.10)引入图灵机:计算机的一个形式化的模型称作图灵机;
Cook指出这台机器的动作如何能够用一个及其复杂但仍然是多项式的冗长的布尔公式来模拟。 该布尔公式为真, 当且仅当由图灵机运行的程序对其输入得到一个“是”的答案;
3.11)其他的NPC问题: 除开可满足性问题外, 我们已经考察过的 哈密尔顿回路问题、巡回售货员问题、最长路径问题都是 NPC(NP完全)问题, 此外,还有 装箱问题, 背包问题, 图的着色问题以及团的问题都是著名的NPC类问题;
3.12)NPC类问题相当广泛: including 操作系统(调度和安全)、数据库系统、运筹学 、逻辑学特别是图论等不同领域的问题;

你可能感兴趣的:(数据结构,图论,npc,NP类问题)