NP完全性

12425 分钟阅读

基本概念

Definition

由多项式时间算法解决的问题集合。

其中多项式时间算法指的是{==算法的时间复杂度与输入的长度之间是多项式关系==}

NP(Non-deterministic Polynomial time)问题是指可以在多项式时间内验证一个解的问题集合。但是并不确定能不能在多项式时间内找到一个解。

多项式时间验证

we say BB is an efficient verifier for problem XX if

  • BB runs in polynomial time,taking two arguments: an instance xx and a certificate yy.

  • there exists a polynomial pp such that for every xx in XX, there is a certificate yy of length at most p(x)p(|x|) such that BB accepts (x,y)(x,y)

NP-hard问题是指所有的NP问题都能在多项式时间内约化为该问题。NP-hard问题不一定是NP问题,它是比NP问题更难的问题。

NPC(NP-Complete)问题是指既是NP问题,又是NP问题中最难的问题(NP-hard)。如果能在多项式时间内解决一个NPC问题,那么所有的NP问题都能在多项式时间内解决。也就是说

P=NPP=NP=NPC P=NP \Rightarrow P=NP=NPC
四者关系
  • P问题能在多项式时间内解决,自然也能在多项式时间内验证,所以P问题是NP问题的子集。PNPP \subseteq NP
  • NPC问题是NP问题的子集,NPCNPNPC \subseteq NP
  • NPC问题也是NP-hard问题的子集,NPCNPhardNPC \subseteq NP-hardNPC=NPNPhardNPC=NP \cap NP-hard
  • NP-hard问题不一定是NP问题,NPhardNPNP-hard \nsubseteq NP
  • 如果NPC问题能在多项式时间内解决,那么所有的NP问题都能在多项式时间内解决,P=NPP=NP=NPCP=NP \Rightarrow P=NP=NPC

常见的多项式时间问题

  • 最短路径问题::给定一个有向图G=(V,E)G = (V, E)即使是带负权的,我们可以在 O(VE)O(|V||E|) 的时间内找到从单一源顶点开始的最短路径;这是多项式时间的,因为图中我们的输入规模可以视为 V+E|V|+|E|
  • 欧拉回路问题:是否存在一条路径,经过图中每条边恰好一次,且最终回到起点。这个问题可以在 O(E)O(|E|) 的时间内使用深度优先搜索解决。
  • 2SAT2-SAT问题:给定一个合取范式(如果它是由 22 个子句的合取构成的,每个子句是由22个变量或者它们的否定构成的析取),也可以在多项式时间内找到是否存在变量的0,1赋值,使得合取式为真。
0-1背包问题

0-1背包问题的时间复杂度是指数级别的,不是多项式时间的。其背包容量是使用2进制表示的(logC\log C),前面讨论的nn指的是nn个2进制编码

形式语言(formal language)

一个形式语言LL是一个字符串的集合,LΣL \subseteq \Sigma^*,其中Σ\Sigma是一个有限的字母表,其上的字符串(string)是字母表上的字符的有限序列,所有这样的字符串构成了Σ\Sigma^*

  • {==至多可数的集合上的有限字符串是可数的==}
  • {==语言可以做衔接、并、交、补、Kleene 闭包(由集合中的符号生成的所有可能的有限长度的字符串所构成的集合)等运算==}
Definition

给定语言LL,输入某一个字符串ww,判定问题是指判断ww是否属于LL。如果wLw \in L,则输出YES,否则输出NO。(decision problem)

AA solves problem LL (AA decides language LL) if for every wΣw \in \Sigma^*

AA accepts ww if and only if wLw \in L

给定语言LL,搜索问题是指找到一个ww,使得wLw \in L

给定语言L1L_1L2L_2,计算某个从L1L_1L2L_2的函数ff

Karp归约

称一个语言L1L_1可以多项式归约( KarpKarp 归约)到另一个语言L2L_2,如果存在一个多项式时间的计算函数ff,使得

wL1f(w)L2 w \in L_1 \Leftrightarrow f(w) \in L_2

记作L1pL2L_1 \leqslant_p L_2。此时说明 L2L_2 至少和 L1L_1 一样难。

那么对于NPNPPP的关系,我们可以得到如下结论:

如果我们找到了一个NPCNPC问题,那么所有的NPNP问题都可以归约到这个NPCNPC问题,也就是说,如果我们能在多项式时间内解决一个NPCNPC问题,那么所有的NPNP问题都可以在多项式时间内解决。此时有

P=NPP=NP=NPC P=NP \Rightarrow P=NP=NPC

如果我们不能在多项式时间内解决一个NPCNPC问题,那么因为NPCNPC问题是NPNP问题的子集,所以PP是不等于NPNP的。

但是很遗憾的是,目前还没有人能够证明PP是否等于NPNP,也就是说我们还不知道NPCNPC问题是否可以在多项式时间内解决。