宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

关于NP与co-NP、RP与coRP的理解

在相信大多数人在接触计算复杂性领域时,都会被P、NP、NPC、NP-Hard、co-NP、RP……的等一系列困难问题的各种分类搞蒙。关于基本的定义,例如什么是P类问题什么是NP类或者NPC类问题,网上有很多很好的回答,我就不介绍了。这篇主要讲什么是co-NP以及如何理解它。

定义

语言LLL属于coNPcoNPcoNP当且仅当LLL的补集L‾∈NP\overline{L}\in NPLNP

这么简短的一句话该如何理解?若要证明一个问题属于coNPcoNPcoNP,根据定义就是证明它的补问题属于NPNPNP,那语言LLL的补集又是什么样子的?该如何描述?这些是我看到这个定义时的疑惑,然后我就进行了一些思考。

NPNPNP出发

我们回想一下NP类的定义:所有非确定图灵机在问题规模的多项式时间内可判定的语言类。或者描述为确定性图灵机在多项式时间可验证的语言类。

我们以SAT问题为例来理解一下(众所周知SAT是第一个NPC问题当然也是NP问题):任给一个布尔表达式,是否存在一个赋值使得表达式结果为true。

根据NP定义,给出布尔表达式的一个yes实例,显然,我们可以在多项式时间验证这个实例是不是能够让表达式结果为true(直接代进去计算就行)。

unSAT问题(有时也写作coSAT):任给一个布尔表达式,它是否是不可满足的(任意赋值都不会让表达式输出true)。这是一个coNPcoNPcoNP问题,因为它的补问题SAT问题是NP问题。

从这个例子中可以体会:①什么是补问题②根据补问题与原问题的关系可知,如果一个问题属于coNPcoNPcoNP,那它的no实例可以在多项式时间被确定性图灵机验证。这个方式也可以用来证明一个问题是不是属于coNPcoNPcoNP

coNPCcoNPCcoNPC

类比NPCNPCNPC的定义,我们容易理解coNPCcoNPCcoNPC:语言L∈coNPCL\in coNPCLcoNPC当且仅当
L∈coNPL\in coNPLcoNP
②任何coNPcoNPcoNP问题可以在多项式时间内归约(这里的归约默认都是Cook归约)到LLL

NPNPNPcoNPcoNPcoNP的关系

  1. P⊂NPP\subset NPPNPP⊂coNPP\subset coNPPcoNPPPP类问题可以多项式时间求解,当然它的yes实例和no实例都可以在多项式时间被验证。

  2. 一般认为NP≠coNPNP\ne coNPNP=coNP,所以NPC⊄coNPNPC\not\subset coNPNPCcoNPcoNPC⊄NPCcoNPC\not\subset NPCcoNPCNPC:这个是可以证明的。

    假设NPC⊆coNPNPC\subseteq coNPNPCcoNP,那么所有的NPNPNP问题可以归约到coNPcoNPcoNP,即NP⊆coNPNP\subseteq coNPNPcoNP;另外,若L∈CoNPL\in CoNPLCoNP,则L‾∈NP⊆coNP\overline{L}\in NP\subseteq coNPLNPcoNP,那么L‾‾=L∈NP\overline{\overline{L}}=L\in NPL=LNP,即coNP⊆NPcoNP\subseteq NPcoNPNP;综上NP=coNPNP=coNPNP=coNP。这与NP≠coNPNP\ne coNPNP=coNP矛盾。

  3. 存在语言(问题)L∈NP,L∈coNPL\in NP,L\in coNPLNP,LcoNPL∉PL\not \in PLP。这意味着P⊂NP∩coNPP\subset NP\cap coNPPNPcoNP

    例如大整数分解问题:任给整数mmmnnn,问mmm是否存在大于1小于nnn的因子。

    ①这是NP的:给出一个yes实例,直接用m除一下就知道了。

    ②这是coNPcoNPcoNP的:思路一是给出这个问题的补问题(任给整数m,n,问m是否不存在小于n的因子),这个补问题的yes实例,可以通过AKS素性检测在多项式时间验证。思路二是直接看原问题的no实例:给整数m和n,其中m不存在小于n的因子,是否能在多项式时间验证出来。这和补问题的yes实例是一样的。

RPRPRPcoRPcoRPcoRP也是一样的理解

RPRPRP问题:语言L∈RPL\in RPLRP当且仅当存在随机多项式时间算法AAA,对LLL的yes实例x∈Lx\in LxL,随机数rrr,有Pr(A(x,r)=1)≥12Pr(A(x,r)=1)\ge \frac{1}{2}Pr(A(x,r)=1)21;对no实例x∉Lx\not\in LxL,随机数rrr,有Pr(A(x,r)=0)=1Pr(A(x,r)=0)=1Pr(A(x,r)=0)=1

coRPcoRPcoRP问题:语言L∈coRPL\in coRPLcoRP当且仅当存在随机多项式时间算法AAA,对LLL的yes实例x∈Lx\in LxL,随机数rrr,有Pr(A(x,r)=1)=1Pr(A(x,r)=1)=1Pr(A(x,r)=1)=1;对no实例x∉Lx \not\in LxL,随机数rrr,有Pr(A(x,r)=0)≥12Pr(A(x,r)=0)\ge \frac{1}{2}Pr(A(x,r)=0)21

初看这个定义觉得很不好理解也不好记忆,利用NPNPNPcoNPcoNPcoNP的关系来理解后,一切开朗了。

第一步:先理解(记住)好RPRPRP。既然是RPRPRP,yse实例求解就是概率性的,所以对x∈Lx\in LxL,正确判断的概率是某个数(习惯写为≥12\ge \frac{1}{2}21);而对于x∉Lx\not\in LxL,一定能够正确判断的。

第二步:推出coRPcoRPcoRP。若L∈coRPL\in coRPLcoRP,则L‾∈RP\overline{L}\in RPLRP。也就是说x∈L‾(x∉L)x\in \overline{L}(x\not\in L)xL(xL),真确判断是概率性的;而x∉L‾(x∈L)x\not\in \overline{L}(x\in L)xL(xL),一定能够正确判断。这句话翻译过来不就是若x∈Lx\in LxLPr(A(x,r)=1)=1Pr(A(x,r)=1)=1Pr(A(x,r)=1)=1;若x∉Lx\not\in LxLPr(A(x,r)=0)≥12Pr(A(x,r)=0)\ge \frac{1}{2}Pr(A(x,r)=0)21