What is P/NP/NPC/NP-hard problem?

  多项式时间(Polynomial time)在计算复杂度理论中,指的是一个问题的计算时间m(n)不大于问题大小n的多项式倍数。任何抽象机器都拥有一复杂度类,此类包括可于此机器以多项式时间求解的问题。
  以数学描述的话,则可说m(n) = O(nk),此k为一常数值(依问题而定)。
  数学家有时把“如多项式时间长的算法”视为快速计算,相对应的是超多项式时间,表示任何多项式时间的输入数目只要够大,超多项式时间所需的解题时间终究会大大超过任何多项式时间的问题。指数时间Exponential time)就是一例。
  可以在决定型依序机器上(例如图灵机)以多项式时间解决的决定性问题,其属于的复杂度类被称为P。可以在多项式时间验证答案的决定性问题称为NP。而NP也是可以在非确定型图灵机以多项式时间解决的问题(NP两字为Non-deterministic Polynomial的缩写)。
  什么是NP(非确定性问题)呢?有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。再比如,大的合数分解质因数的问题,有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?也没有这样的公式。
  这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式时间内算出来,就叫做多项式非确定性问题。而如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题。
  完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。
  人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们於是就猜想,是否这类问题,存在一个确定性算法,可以在指数时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想。

NP-Complete问题

Cook在1971年给出并证明了有一类问题具有以下性质:

  1. 这类问题中任何一个问题至今未找到多项式时间算法;
  2. 如果这类问题中的一个问题存在有多项式时间算法,那么这类问题都有多项式时间算法(就是多项式时间内,这类问题可互相规约)。

这类问题中的每个问题称为NP完全(NP-Complete,NPC)。

NP-Hard问题

如果判定问题A满足A∈NP且NP中的任何一个问题都可在多项式时间内规约为A,则称A为NP完全(NP-Complete,NPC)。若NP中的任何一个问题都可以在多项式时间规约为判定问题A,则称A为NP难(NP-Hard,NPH)。
显然NPC⊆NPH
NP完全和NP难问题的区别是NP难问题无需判断A是否属于NP。验证一个问题A是否为NPC的关键有两点:

  1. 一是NP中任何一个问题是否可在多项式时间内规约为A;
  2. 其次,是否存在一个字符串,其规模为实例规模的多项式函数,以及是否存在一个多项式时间的验证算法。

由于NPC里包含很多著名的组合最优化问题,经过几代数学家的努力,迄今没有找到多项式时间算法,人们猜想NPC中的任何一个问题没有多项式时间算法,即P∩NPC=∅。

 
 
 
总结:
P问题就是在多项式时间内可以解决的问题
NP问题就是可以在多项式时间内对一个给定的解进行验证,并给出其正确性的问题
NPC问题就是可以在多项式时间内对这个问题所有可能的解进行验证,并给出其正确性的问题
 

 

你可能感兴趣的:(em)