P/NP/NP-Complete/NP-Hard

记得学计算理论的时候,似乎对这五个问题很清晰,但当时也不知道这个有什么用,所以很快又忘掉了。

现在想想,这个理论基础还是必须的,至少在划分算法复杂度上这是一个理论基石。

 

先看他们的定义:

 

P问题:可以通过确定性图灵机在多项式时间内求解。

NP问题:可以通过非确定性图灵机在多项式时间内求解。 或者说,可以在多项式时间内验证一个解。

              NP 中的 N 是指非确定的(non-deterministic)算法,这是这样一种算法:(1)猜一个答案。(2)验证这个答案是否正确。  (3)只要存在某次验证,答案是正确的,则该算法得解。 NP (non-deterministic polynomial)问题就是指,用这样的非确定的算法,验证步骤(2)有多项式时间的计算复杂度的算法。 
              NP问题的例子,Hamilton回路(在图中找一条环路,它经过且只经过一次每一个点)。
              非NP问题,无法在多项式时间内验证解。例子:问一个图是否不存在Hamilton回路。(除非穷举所有可能,否则无法验证)

NPC问题:它满足如下两个条件:
                1.是NP问题。
                2.所有的NP问题都能规约为它。具体参考百度百科NPC问题;
               俗语就是,到现在还找不到多项式时间解法的NP问题,只能用指数级甚至阶乘级的复杂度的搜索。
               因为所有的NP问题都能规约为NPC问题,如果一个NPC问题存在多项式时间的解法,那么会得出P=NP=NPC,所以,目前人们不相信NPC问题存在多项式时间的解法。
                NPC问题的例子:逻辑电路问题。给定一个逻辑电路(比如输入接上若干与非门),是否存在一个输入使其输出为True?

NP-Hard问题:所有的NP问题都能规约到它,但它不一定是NP问题。具体参考百度百科NP-hard。“旅行推销员问题”,简称“TSP”。即“已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。还有一个典型的例子,就是输出n个元素的全排列。即使是非确定机,也不能在多项式时间内解决,这是一个NP-hard问题。

 

P和NP给出两个基本概念,而NPC才是我们实际情况遭遇到的问题,NP-hard是比NPC更大的一个范畴,是否对于只能通过穷举才能解决的问题,我们都可以说这是NP-hard呢?如果P!=NP就可以这样说。

NP-hard问题和NP-C问题都是在NP问题的基础上定义的, NPC是NP-hard和NP的交集,目前认为NP-hard的大型实例不存在精确解法,只能近似求解。

 

问题的归约
这……我该用什么术语来解释呢?集合?太难说清了……如果你还记得函数的映射的话就比较容易想象了。
大致就是这样:找从问题1的所有输入到问题2的所有输入的对应,如果相应的,也能有问题2的所有输出到问题1的所有输出的对应,则若我们找到了问题2的解法,就能通过输入、输出的对应关系,得到问题1的解法。由此我们说问题1可归约到问题2。

 

 主要参考:

http://wenda.tianya.cn/wenda/thread?tid=2c7e8813511b9f81

你可能感兴趣的:(P/NP/NP-Complete/NP-Hard)