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

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

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

定义

语言 L L L属于 c o N P coNP coNP当且仅当 L L L的补集 L ‾ ∈ N P \overline{L}\in NP LNP

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

N P NP NP出发

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

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

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

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

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

c o N P C coNPC coNPC

类比 N P C NPC NPC的定义,我们容易理解 c o N P C coNPC coNPC:语言 L ∈ c o N P C L\in coNPC LcoNPC当且仅当
L ∈ c o N P L\in coNP LcoNP
②任何 c o N P coNP coNP问题可以在多项式时间内归约(这里的归约默认都是Cook归约)到 L L L

N P NP NP c o N P coNP coNP的关系

  1. P ⊂ N P P\subset NP PNP P ⊂ c o N P P\subset coNP PcoNP P P P类问题可以多项式时间求解,当然它的yes实例和no实例都可以在多项式时间被验证。

  2. 一般认为 N P ≠ c o N P NP\ne coNP NP=coNP,所以 N P C ⊄ c o N P NPC\not\subset coNP NPCcoNP c o N P C ⊄ N P C coNPC\not\subset NPC coNPCNPC:这个是可以证明的。

    假设 N P C ⊆ c o N P NPC\subseteq coNP NPCcoNP,那么所有的 N P NP NP问题可以归约到 c o N P coNP coNP,即 N P ⊆ c o N P NP\subseteq coNP NPcoNP;另外,若 L ∈ C o N P L\in CoNP LCoNP,则 L ‾ ∈ N P ⊆ c o N P \overline{L}\in NP\subseteq coNP LNPcoNP,那么 L ‾ ‾ = L ∈ N P \overline{\overline{L}}=L\in NP L=LNP,即 c o N P ⊆ N P coNP\subseteq NP coNPNP;综上 N P = c o N P NP=coNP NP=coNP。这与 N P ≠ c o N P NP\ne coNP NP=coNP矛盾。

  3. 存在语言(问题) L ∈ N P , L ∈ c o N P L\in NP,L\in coNP LNP,LcoNP L ∉ P L\not \in P LP。这意味着 P ⊂ N P ∩ c o N P P\subset NP\cap coNP PNPcoNP

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

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

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

R P RP RP c o R P coRP coRP也是一样的理解

R P RP RP问题:语言 L ∈ R P L\in RP LRP当且仅当存在随机多项式时间算法 A A A,对 L L L的yes实例 x ∈ L x\in L xL,随机数 r r r,有 P r ( A ( x , r ) = 1 ) ≥ 1 2 Pr(A(x,r)=1)\ge \frac{1}{2} Pr(A(x,r)=1)21;对no实例 x ∉ L x\not\in L xL,随机数 r r r,有 P r ( A ( x , r ) = 0 ) = 1 Pr(A(x,r)=0)=1 Pr(A(x,r)=0)=1

c o R P coRP coRP问题:语言 L ∈ c o R P L\in coRP LcoRP当且仅当存在随机多项式时间算法 A A A,对 L L L的yes实例 x ∈ L x\in L xL,随机数 r r r,有 P r ( A ( x , r ) = 1 ) = 1 Pr(A(x,r)=1)=1 Pr(A(x,r)=1)=1;对no实例 x ∉ L x \not\in L xL,随机数 r r r,有 P r ( A ( x , r ) = 0 ) ≥ 1 2 Pr(A(x,r)=0)\ge \frac{1}{2} Pr(A(x,r)=0)21

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

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

第二步:推出 c o R P coRP coRP。若 L ∈ c o R P L\in coRP LcoRP,则 L ‾ ∈ R P \overline{L}\in RP LRP。也就是说 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 ∈ L x\in L xL P r ( A ( x , r ) = 1 ) = 1 Pr(A(x,r)=1)=1 Pr(A(x,r)=1)=1;若 x ∉ L x\not\in L xL P r ( A ( x , r ) = 0 ) ≥ 1 2 Pr(A(x,r)=0)\ge \frac{1}{2} Pr(A(x,r)=0)21

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值