计算复杂性——第十章

近似算法

判决问题和优化问题:同一问题的两种表述方式
1. 最小顶点覆盖的近似算法
在这里插入图片描述
即一直找两个端点都没有被标记的边,直到不存在这样的边为止。
上述算法显然是多项式时间算法,且该近似算法得到的顶点覆盖点数不超过最小顶点覆盖点数的两倍。
核心思想:首先证明其是一个顶点覆盖,其次证明其大小的确不超过最小顶点覆盖的两倍
证明:

  1. X X X为近似算法得到的顶点覆盖, H H H X X X覆盖的边的集合, Y Y Y为最小顶点覆盖。
  2. H H H中的每条边最多向 X X X贡献两个顶点,因此 X X X大小最多是 H H H大小的两倍,即 ∣ X ∣ ≤ 2 ∣ H ∣ |X|\leq 2|H| X2H;由于 Y Y Y是顶点覆盖,因此 H H H中的每一个边都和 Y Y Y中的一些顶点相连。因此 Y Y Y的大小是大于等于 H H H的,即 ∣ H ∣ ≤ ∣ Y ∣ |H|\leq |Y| HY;所以 ∣ X ∣ ≤ 2 ∣ Y ∣ |X|\leq 2|Y| X2Y。即,得到顶点覆盖的大小不超过最小顶点覆盖大小的两倍。

2. 最大割的近似算法
在这里插入图片描述
最小割的现实应用可能更广一些
在这里插入图片描述
即尝试将现有集合划分为两个顶点集合,然后测试这样划分是否能增加割的大小。
在这里插入图片描述
对于最大割问题的,2最优的多项式近似算法。
证明:

  1. 可以给出更强的结论,近似算法得到的割的大小至少是图 G G G中边数的一半。
  2. 对于任意图 G G G,割边的数量不低于非割边的数量 。如果低于,则说明上述近似算法未执行完,可以找到一个节点,将其从原本的集合划分到另一个集合可以增加割边的数量。
  3. 由于割边和非割边构成了图 G G G的所有边,近似算法得到的割边数量又不低于非割边的数量 。因此近似算法得到的最大割的大小至少是图 G G G所有边的一半,又最大割的数量是小于等于图 G G G所有边的数量的,所以近似算法得到的最大割的大小至少是真实最大割数量的一半。

3. 最大独立集问题
独立集是团的反一面(反团),独立集中任意两个顶点之间不存在边。

概率算法

使用随机过程结果的算法。核心思想是保证每次随机得到都是最优的解决方案。由于老老实实计算最优解计算成本和时间成本过高,而近似算法又会产生偏差,因此提出概率算法。

1. BPP(Bounded-error, Probabilistic, Polynomial time)
BPP: 概率图灵机在多项式时间,概率误差在 1 2 \frac{1}{2} 21内可以判定的语言集合。
概率图灵机 M M M是一种特殊的非确定图灵机。每一次非确定步骤被叫做掷硬币步骤,只有两种合法的状态。

概率图灵机 M M M接受输入 w w w的概率(可以看作布尔公式的赋值,使最后的输出为真):所有接受分支 b b b的概率之和
在这里插入图片描述
概率图灵机由于是随机过程的算法,因此会存在判定错误的情况。我们允许小概率错误的出现,并作出如下定义:
在这里插入图片描述
由于判定一次最大的错误概率不允许超过 1 2 \frac{1}{2} 21,因此按照输入长度,可以得到对于长度为 n n n的输入的最大错误概率 ϵ = 2 − n \epsilon = 2^{-n} ϵ=2n

考虑概率算法是否在时间和空间上高效: 看在最坏分支上的时间/空间复杂度,来判定该概率算法是否高效。

2. 素数判定( P R I M E S ∈ B P P PRIMES\in BPP PRIMESBPP

  1. 遍历所有小于该数的数,如果遍历的数能够作为除数(找因子的过程),则不是素数。该算法是指数时间的,因为数字的大小在其长度上是指数的。
  2. 利用多项式时间概率算法来进行素数测试。这个方法不基于找因子的思想,因为暂时没找到多项式时间的概率算法来寻找一个数的因子。

p p p等价: X X X Y Y Y相差 p p p的倍数

费马小定理:
在这里插入图片描述
在这里插入图片描述
也就是说素数对于 Z p + Z^+_p Zp+中所有元素都能通过费马测试,但是不是对于 Z p + Z^+_p Zp+中所有元素都能通过费马测试的数就是素数。
应用:
在这里插入图片描述

伪素数: 能通过所有比自己小的素数的费马测试。除了卡米切尔数之外,伪素数和素数是等价的。

非伪素数的性质: 如果一个数不是伪素数,则它至少有一半以上的费马测试它通不过。因此,可以随机选取测试数,通不过其中任意一个测试则为合数。

有一个多项式时间概率算法,能够在除开卡米切尔数的情况下,将合数和质数分离开。
判定伪素数的算法
在这里插入图片描述
判定素数的算法
在这里插入图片描述
两个定理说明判定素数的算法是正确的,由于除2以外的偶数都不是素数,因此只考虑奇数的情况
不会将正确的判断成错误的
在这里插入图片描述
极小概率将错误的判断成正确的
在这里插入图片描述
上述算法只会存在单方面错误,也就是判决错误的时候,输入一定是一个合数。单方面错误是概率图灵机的一个特性。

3. RP C O M P O S I T E S ∈ R P COMPOSITES\in RP COMPOSITESRP
RP:如果输入属于该语言,则接受该输入的概率至少为 1 2 \frac{1}{2} 21;如果输入不属于该语言,则被拒绝的概率为1。
概率放大技术
在这里插入图片描述
借助概率放大技术:我们可以保持概率图灵机在多项式时间内运行下,错误概率控制在指数小。相当于用长时间来换低错误。

4. Read-once Branching Programs
一个分支程序是一个计算模型,查询输入变量,根据查询结果确定如何执行。一个分支程序可以用有向有环图表示,如下:
在这里插入图片描述
由于测试两个分支程序是否等价属于 c o N P C coNPC coNPC问题,目前不知道解决该问题的多项式时间算法。如果我们加入一些限制变为只读一次分支程序,就存在概率多项式时间算法即属于 B P P BPP BPP
只读一次分支程序(read-once branching program):从任意起始节点到输出节点的路径上每个变量节点至多被访问一次。( E Q R O B P ∈ B P P EQ_{ROBP} \in BPP EQROBPBPP)
在这里插入图片描述
概率算法会使用到随机数,但是我们的随机数产生器实际上是伪随机的。在某些算法中能够表现良好,在一些算法中又表现不好。要证明该伪随机产生器对于该算法是有效的很难。

交互式证明系统

1. 交互式证明系统
交互式证明系统: 就是通过证明者和验证者之间的交互完成计算,直观上说就是设计一个协议完成语言L的交互式计算,使得那么当x∈L时证明者可以给出使验证者(PPT)相信的证明,当x∉L时任何证明者(甚至计算能力超过图灵机)都不能使验证者相信。能被交互式证明系统解决的问题类记为IP
在这里插入图片描述
对于 S A T SAT SAT问题,证明者可以给出满意的赋值让验证者相信它是可满足的;但是证明者如何说服一个范式是不可满足的呢(SAT问题的补问题不知道是否在 N P NP NP中)?这时需要加入两个额外的特征形成交互式证明系统:

  • 他们允许双向交互
  • 验证者可以是概率多项式时间图灵机

2. 图同构( I S O ISO ISO)问题
尽管图同构问题属于 N P NP NP,但是现在不能确定它属于 P P P还是属于 N P C NPC NPC,属于小部分的还未进行分类的问题。
在这里插入图片描述
图的非同构问题甚至不能确定它是否在 N P NP NP中,证明者如何让验证者相信两个图是非同构的。
在这里插入图片描述
在这里插入图片描述
验证者如果发现证明者一直都能答对,那么两个图是非同构的。如果两个图是同构的,那么证明者只能以百分之50的概率猜测实际是来自哪一个图。验证者可以基于证明者(计算力无穷的一方)的回答,来判断这两个图是否是同构的。

3. 交互式系统模型:
验证者(V):
在这里插入图片描述
证明者( P P P):
在这里插入图片描述
在这里插入图片描述
对同一个输入,随机验证 k k k次之后,每次都答对,则会相信该命题是正确的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
NP问题和BPP可以看作交互式证明系统的一个子部分,对应单方面证明和验证者的概率接受过程。图的非同构问题目前无法证明在 N P NP NP或者 B P P BPP BPP中。

4. Q I P = I P = P S P A C E QIP=IP=PSPACE QIP=IP=PSPACE

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值