P,NP,NPH,NPC问题

1,015 阅读3分钟

多项式级别的时间复杂度

说这几种问题之前,先说明下什么是多项式级别的时间复杂度。在算法上,我们经常看到或者听到的有很多种时间复杂度,如常量级O(1)、对数级O(nlog(n))、指数级O(x^n)等等,不过在数学上其实可以归为两类:多项式级别和非多项式级别

其中:

  • 多项式级别的是指以n为底数的,比如:O(1)=O(n^0)O(log(n))O(nlog(n))O(n)=O(n^1)O(n^2)
  • 非多项式级别的是指以n为指数的,比如:O(n!)O(x^n)

P问题

定义为:能够在多项式级别的时间复杂度内解决的问题,全称Polynomial Problem

举例来理解:有一个犯罪团伙,里面的人属于心不齐、贪生怕死一类的,所以警察可以在多项式级别的时间里把所有罪犯都审问的仔仔细细,安排的明明白白,这个就是P问题

NP问题

定义为:能够在多项式级别的时间复杂度内验证其中一个解的问题,全称Non-Deterministic Polynomial Problems

其中,"Non-Deterministic"表示"非确定性",即无法确定它是不是P问题。可以这样来理解:现阶段的确实只能求出一个解,但是不代表以后能不能求出所有解,所以干脆先用不确定性来做定语

同样以审问举例,换了一个犯罪团伙,里面的人个个都是人才,奸诈狡猾,这时候警察用尽浑身解数也只能在多项式级别的时间里将其中一个犯人审问清楚,这个就是NP问题

而对于一个P问题, 它既然能在多项式复杂度内解决, 那也一定能在多项式复杂度内检验它的一个解, 所以我们可以得到:P \subset NP

NPH问题

NPH即NP-Hard,定义为:如果在多项式级别的时间复杂度内可以证明,所有需要解决的NP问题都可以通过另一个问题来解决,那么这个问题就是NP-Hard问题

以智力题举例,有一个美女的手机被偷了,现场抓到了A、B、C三个人,他们的供词分别是:A说不是他偷的,B说是A、C中的某一个人偷的,C说是A、B中的某一个人偷的。在多项式级别的时间里我们得到了这样一个线索:这三个人中只有一个人说了假话。所以是谁偷手机的问题就转化成了谁说假话的问题上,那么谁说了假话这个问题就是NP-Hard问题

NPC问题

NPC即NP-Complete,定义为:如果在多项式级别的时间复杂度内可以证明,所有需要解决的NP问题都可以通过另一个NP问题来解决,那么这个问题就是NP-Complete问题

这是个老千层饼了,所以就不举例了吧……

参考资料

  1. 初赛备考干货:P问题,NP问题,NP-hard问题,NPC问题,傻傻分不清楚?
  2. P问题、NP类问题、NP-hard问题、NPC问题