计算理论导论笔记
计算理论导论
正则语言和自动机(Regular Languages and Automata)
DFA
确定性有限状态自动机(Deterministic Finite state Automata/DFA)由一个五元组 (Q,Σ,δ,q0,F)(Q,Σ,δ,q0,F) 唯一确定。
- QQ 为状态集合。
- ΣΣ 为字符集。
- δ:Q×Σ→Qδ:Q×Σ→Q 为状态转移函数。
- q0q0 初始状态。
- F⊆QF⊆Q 为可接受状态集(accept states)。
令 AA 为机器 MM 接受的所有串的集合,称 AA 是机器 MM 的语言(Language),或者称 MM 接受/承认 AA,记作 L(M)=AL(M)=A。
正则语言
对于某个语言,如果存在某个机器承认它,那么我们称其为正则语言(Regular Language)。
可以证明,所有正则语言的集合关于交集、并集、补集、笛卡尔积、级联(Concatenation)运算、闭包(star)操作封闭。
级联:A∘B={ab|a∈A,b∈B}A∘B={ab|a∈A,b∈B}。
闭包操作:A∗={x1x2⋯xk|k≥0,xi∈A}A∗={x1x2⋯xk|k≥0,xi∈A}。
NFA
非确定性有限状态自动机(Non-deterministic Finite state Automata/NFA)也可以由一个五元组 (Q,Σ,δ,q0,F)(Q,Σ,δ,q0,F) 唯一确定。
- QQ 为状态集合。
- ΣΣ 为字符集。(记 Σϵ=Σ∪{ϵ}Σϵ=Σ∪{ϵ})
- δ:Q×Σϵ→P(Q)δ:Q×Σϵ→P(Q) 为状态转移函数,其中 P(⋅)P(⋅) 为幂集。
- q0q0 初始状态。
- F⊆QF⊆Q 为可接受状态集(accept states)。
N=(Q,Σ,δ,q0,F)N=(Q,Σ,δ,q0,F),则串 w=w1w2⋯wn(wi∈Σ)w=w1w2⋯wn(wi∈Σ) 被 NN 接受当其可以被视作 w1w2⋯wm((wi∈Σϵ))w1w2⋯wm((wi∈Σϵ)) QQ 中存在状态序列 r0,r1,…,rmr0,r1,…,rm 满足 r0=q0r0=q0,ri+1∈δ(ri,wi+1),∀0≤i≤n−1ri+1∈δ(ri,wi+1),∀0≤i≤n−1,rm∈Frm∈F。这里的 ϵϵ 为空字符。NFA 同样也有其对应的语言。
显然 NFA 是 DFA 的扩展。同时可以证明对于每个 NFA (Q,Σ,δ,q0,F)(Q,Σ,δ,q0,F),存在和其识别语言相同的 DFA (Q′,Σ′,δ′,q′0,F′)(Q′,Σ′,δ′,q′0,F′)。
先不考虑 ϵ−ϵ− 边,考虑到每一个字符前缀在 NFA 上对应的可能能跳到的节点都是 QQ 的一个子集,于是我们直接令 Q′=P(Q)Q′=P(Q),然后 ∀S∈Q′,a∈Σ∀S∈Q′,a∈Σ,令 δ′(S,a)=⋃s∈Sδ(s,a)δ′(S,a)=⋃s∈Sδ(s,a),接着取 q′0={q0}q′0={q0},最后令 F′={S∈Q′|∃s∈S,s∈F}F′={S∈Q′|∃s∈S,s∈F}。
如果加上 ϵ−ϵ− 边差不多,取 E(S)E(S) 为 SS 可以通过 00 或更多 ϵ−ϵ− 边到达的状态集,取 δ′(S,a)=⋃s∈SE(δ(s,a))δ′(S,a)=⋃s∈SE(δ(s,a)),q′0=E({q0})q′0=E({q0}) 即可。
正则表达式
RR 是正则表达式(Regular Expressions)如果 RR 是(下面 R1,R2R1,R2 是一些正则表达式):
- 一个字符 a(a∈Σ)a(a∈Σ) 的集合
- 长度为 00 的字符 ϵϵ
- ∅∅
- R1∪R2R1∪R2
- R1∘R2R1∘R2
- R∗1R∗1
定理:一个语言正则当且仅当存在正则表达式描述它。
则表达式描述的一定是正则语言:按照正则语言的定义构造 DFA 即可。
正则语言一定可以用正则表达式描述,这个证明有点复杂。
首先我们引入推广性确定性有限自动机(GNFA),区别在于每条边上除了可能是空字符 ϵϵ、字符集中字符,还有可能是一个正则表达式。然后整个构造方法大概就是由 NFA 不断缩小,最后只剩下两个状态为止,此时即找到该正则语言对应的正则表达式。
对于一个 DFA,我们先通过一些简单的处理让其变成 NFA,同时只有一个初始节点与接受节点,且初始节点没有入边,接受节点没有出边。删减过程就是每次选择一个非初始节点并且非接受节点的节点 xx,然后对于每对节点 s,ts,t,更新 s→ts→t 的边为 (s→t)∪(s→x)∘(x→x)∗∘(x→t)(s→t)∪(s→x)∘(x→x)∗∘(x→t),接着删掉 xx。重复该过程直到只剩下初始节点与接受节点,此时它们之间的边即为正则语言对应的正则表达式。
非正则语言
泵引理(Pumping Lemma):如果 AA 是正则语言,那么存在 pp 满足,对于任意长度大于等于 pp 的 AA 中字符串 ss,ss 总能切成三部分 s=xyzs=xyz 满足 ∀i≥0,xyiz∈A,|y|>0,|xy|≤p∀i≥0,xyiz∈A,|y|>0,|xy|≤p。(直观来说就是存在循环节,这个比较好证,由状态有限,直接取 p=|Q|p=|Q| 即可,总有一个状态被经过了至少两次)
上下文无关语言和下推自动机(Context Free Languages and Pushdown Automata)
上下文无关语言(CFL)
上下文无关语法是一个四元组 (V,Σ,R,S)(V,Σ,R,S),其中:
- VV 是一个叫做变量(variables)的有限集合。
- ΣΣ 是一个和 VV 不相交的有限集合,叫做终结符(terminals)集合。
- RR 是一个规则(rules)的有限集,每条规则把一个变量映射成一个变量和终结符的字符串。
- S∈VS∈V 是开始变量。
令 u,v,wu,v,w 是变量和终止符组成的字符串,如果 A→wA→w 是该语法的一条规则,那么我们称 uAvuAv 可以产生(yields)uwvuwv,记作 uAv⇒uwvuAv⇒uwv。称 uu 可以产生(derives)vv,同样记作 u⇒vu⇒v,当 u=vu=v 或者存在序列 u1,u2,…,uk(k≥0)u1,u2,…,uk(k≥0) 满足 u⇒u1⇒u2⇒⋯⇒vu⇒u1⇒u2⇒⋯⇒v。
那么所有可以由 SS 产生的字符串集合称作该语法的语言。
下推自动机(PDA)
下推自动机由六元组 (Q,Σ,Γ,δ,q0,F)(Q,Σ,Γ,δ,q0,F) 组成,其中:
- QQ 状态集。
- ΣΣ 输入字符集。
- ΓΓ 堆栈字符集。
- δ:Q×Σϵ×Γϵ→P(Q×Γϵ)δ:Q×Σϵ×Γϵ→P(Q×Γϵ) 转移函数。
- q0∈Qq0∈Q 起始状态。
- F⊆QF⊆Q 接受状态集。
一个字符串 ww 可以被下推自动机 M=(Q,Σ,Γ,δ,q0,F)M=(Q,Σ,Γ,δ,q0,F) 接受当 ww 可以被视作 w1,w2,…,wm(wi∈Σϵ)w1,w2,…,wm(wi∈Σϵ),并且存在状态序列 s0,s1,s2,…,sms0,s1,s2,…,sm 和字符串 t1,t2,…,tmt1,t2,…,tm 满足:
- s0=q0s0=q0 并且 t0=ϵt0=ϵ。
- 对于 i=0,1,…,m−1i=0,1,…,m−1,满足 (si+1,b)∈δ(si,wi+1,a)(si+1,b)∈δ(si,wi+1,a),其中 ti=ar,ti+1=brti=ar,ti+1=br 并且 a,b∈Γϵ,r∈Γ∗a,b∈Γϵ,r∈Γ∗。
- sm∈Fsm∈F。
两者关系
上下文无关语言和下推自动机的计算能力是一样的。
从语言到自动机:一个很简单的想法就是考虑展开规则是有限的,所以直接用堆栈描述当前历史所有在展开哪个规则以及展开到哪一步即可。
从自动机到语言:
我们可以很简单地修改 PDA 使得接受状态只有一个,且最后栈弹空,且栈只存在加入和删除,不存在替换。
P=(Q,Σ,Γ,δ,q,{qa}),G=(V,Σ,R,S)P=(Q,Σ,Γ,δ,q,{qa}),G=(V,Σ,R,S),取 V={Ap,q|p,q∈Q}V={Ap,q|p,q∈Q},取三条规则。
- ∀p,q,r,s∈Q,u∈Γ,a,b∈Σϵ∀p,q,r,s∈Q,u∈Γ,a,b∈Σϵ,若 δ(p,a,ϵ)∋(r,u),δ(s,b,u)∋(q,ϵ)δ(p,a,ϵ)∋(r,u),δ(s,b,u)∋(q,ϵ),加入规则 Ap,q⇒aAr,sbAp,q⇒aAr,sb。
- ∀p,q,r∈Q∀p,q,r∈Q,加入规则 Ap,q⇒Ap,rAr,qAp,q⇒Ap,rAr,q。
- ∀p∈Q∀p∈Q,加入规则 Ap,p⇒ϵAp,p⇒ϵ。
取 S=Aq,qaS=Aq,qa。
CFL 的边界
Pumping Lemma for CFLs:如果 AA 是 CFL,那么存在 pp 满足如果 s∈As∈A 且 |s|≥p|s|≥p,那么 ss 可以被切分为五个部分 uvxyzuvxyz 满足 ∀i≥0,uvixyiz∈A∀i≥0,uvixyiz∈A 且 |vy|>0,|vxy|≤p|vy|>0,|vxy|≤p。
怎么证明:考虑 CFL 按照语法构造过程中形成的树结构,树只要足够大必然存在两个相同的变量出现在一条直上直下的路径上,那么用上面的变量树替换下面的变量树即可造成重复。
举例:{anbncn|n∈N},{ww|w∈{0,1}∗}{anbncn|n∈N},{ww|w∈{0,1}∗} 不是上下文无关模型。
图灵机
图灵机(Turing Machine/TM)
kk 纸带图灵机是一个七元组 (Q,Σ,Γ,δ,q0,qaccept,qreject)(Q,Σ,Γ,δ,q0,qaccept,qreject):
- QQ 状态集,ΣΣ 输入字符集,ΓΓ 纸带字符集。
- δ:Q×Γk→Q×Γk×{L,S,R}kδ:Q×Γk→Q×Γk×{L,S,R}k。
- q0q0 开始状态,qacceptqaccept 接受状态,QrejectQreject 拒绝状态。
可以看成是一个布尔函数。
当前状态 q;x=(x1,…,xk)q;x=(x1,…,xk),一次转移步骤 δ(q,x)=(q′,x′,z),z∈{L,S,R}kδ(q,x)=(q′,x′,z),z∈{L,S,R}k。
一个格局(configuration):当前状态,纸带内容,当前纸带头位置。
进入 qaccept,qrejectqaccept,qreject 停机。
可识别 可判定
如果一个语言可以被图灵机 MM 识别,就称其是可识别的(recognizable),然而还是有可能存在输入使得 MM 无法停机。
如果一个图灵机 MM 从来不会死循环就称其可以判定一个语言,继而有可判定的(decidable)定义。
对于一个函数 f:{0,1}∗→{0,1}∗f:{0,1}∗→{0,1}∗,称 MM 计算 ff 如果对于任意输入 xx,MM 都会进入停机状态且在输出纸带上面写了 f(x)f(x)。
称图灵机 MM 运行时间为 T(n)T(n) 当对任意输入 xx,图灵机运行不超过 T(|x|)T(|x|) 步就会停机。
T:N→NT:N→N 是时间可构造(time-constructible)当 T(n)≥nT(n)≥n 且存在一个图灵机在时间 T(n)T(n) 内计算 x→T(|x|)x→T(|x|)。
大字符集
对于任意图灵机 MM 在时间 T(n)T(n) 内计算函数 ff,使用纸带字符集 ΓΓ,那么存在另一个图灵机 M′M′ 在时间 O(T(n)log|Γ|)O(T(n)log|Γ|) 内计算函数 ff 而只用纸带字符集 {0,1,△,_}{0,1,△,–}。
把大字符集编码即可。
多条纸带
对于任意 kk 条纸带图灵机 MM 在时间 T(n)T(n) 内计算函数 ff,那么存在另一个只用一条纸带的图灵机 M′M′ 在时间 O(kT2(n))O(kT2(n)) 内计算函数 ff。
Church-Turing Thesis
任何算法等价于一个图灵计算过程。
通用图灵机(Universal TM)
存在一个通用图灵机可以模拟任何图灵机运行。
存在一个图灵机满足 ∀x.α∈{0,1}∗,U(x,α)=Mα(x)∀x.α∈{0,1}∗,U(x,α)=Mα(x),其中 αα 代表了图灵机 MαMα,如果对于某个输入 xx,MαMα 运行了 TT 步停机,那么 U(x,α)U(x,α) 运行了 CTlogTCTlogT 步停机,其中 CC 是取决于 MαMα 的一个常数。
图灵机的能力
存在不能被任何图灵机计算的布尔函数吗?
存在不能被任何图灵机识别/判定的语言吗?
存在能被图灵机识别但是不能被判定的语言吗?
可计算性
UCUC
定义一个布尔函数 UC:{0,1}∗→{0,1}UC:{0,1}∗→{0,1},对于任意输入 αα,设 αα 表示的图灵机为 MαMα,那么如果 Mα(α)=1Mα(α)=1 表示 MαMα 接受字符串 αα,那么我们取 UC(α)=0UC(α)=0(拒绝),否则我们取 UC(α)=1UC(α)=1(接受)。
那么 UCUC 就是不可计算,其对应的语言就是不可判定的。
证明:假设存在图灵机 MM 计算 UCUC,令 <M><M> 为 MM 的字符串表示,那么有 UC(<M>)=M(<M>)UC(<M>)=M(<M>) 而 UC(<M>)≠M(<M>)UC(<M>)≠M(<M>) 矛盾。
HALTHALT
考虑语言 HALT={<M,α>|M halts on α}HALT={<M,α>|M halts on α},那么该语言是不可判定的。(PS:该语言是可识别的,考虑直接模拟将 αα 输入 MM。)
考虑反证法,假设存在这样一个判定该语言的图灵机 MHALTMHALT,那么对于任意字符串 αα 定义的图灵机 MαMα,考虑用 <Mα,α><Mα,α> 输入 MHALTMHALT,如果被接受了,说明不会死循环,然后直接模拟可以得出 Mα(α)Mα(α) 取反,否则输出 11,由此我们通过该图灵机构造出了一个计算 UCUC 的图灵机,矛盾。
ATMATM
考虑语言 ATM={<M,α>|M accepts α}ATM={<M,α>|M accepts α},那么该语言不可判定。
同样用判定语言 ATMATM 的图灵机 MAMA 构造 MUCMUC,对于输入 αα 取 MA(α,α)MA(α,α) 即可。
映射归约
对于两个问题 A,BA,B,我们将 AA 规约成 BB 来解决 AA,可以先解决 BB 然后用这个解决方法解决 AA。
我们称一个语言 AA 可以被映射归约(mapping reducible)到语言 BB,记作 A≤mBA≤mB,如果存在一个可计算的函数 f:Σ∗→Σ∗f:Σ∗→Σ∗ 满足 ∀w,w∈A∀w,w∈A 当且仅当 f(w)∈Bf(w)∈B。
如果 A≤mBA≤mB,那么:BB 可判定 ⇒⇒ AA 可判定,AA 不可判定 ⇒⇒ BB 不可判定。
ETMETM
考虑语言 ETM={<M>|M accepts nothing}ETM={<M>|M accepts nothing},那么该语言不可判定。
考虑证明 ATM≤mETMATM≤mETM 或者 ATM≤m¯ETMATM≤m¯¯¯¯¯¯¯¯¯¯¯ETM。
EQTMEQTM
考虑语言 EQTM={<M1,M2>|M1 and M2 are TMs and L(M1)=L(M2)}EQTM={<M1,M2>|M1 and M2 are TMs and L(M1)=L(M2)},那么该语言不可判定。
考虑证明 ETM≤mEQTMETM≤mEQTM。
回顾
AA 可识别不等价于 ¯A¯¯¯¯A 可识别。
AA 可判定等价于 ¯A¯¯¯¯A 可判定。
定理:AA 可判定等价于 AA 可识别且 ¯A¯¯¯¯A 可识别。
时间复杂性(Time Complexity)
复杂性类
复杂性类:可以由一定量的计算资源计算的问题(语言)构成的集合。
定义时间函数 T:N→NT:N→N 任意函数,定义 DTIME(T(n))DTIME(T(n)) 为可以被某些图灵机在 O(T(n))O(T(n)) 时间内解决的问题(判定的语言集合)。
多项式时间复杂性类 P=∪c≥0DTIME(nc)P=∪c≥0DTIME(nc)。
考虑两个时间可构造函数 f,gf,g,若 f(n)=o(g(n))f(n)=o(g(n)),则显然 DTIME(f(n))⊆DTIME(g(n))DTIME(f(n))⊆DTIME(g(n))。能否构造语言 AA 使得 A∈DTIME(g(n))A∈DTIME(g(n)) 而 A∉DTIME(f(n))A∉DTIME(f(n))?
考虑构造图灵机 MM:对于任意输入 xx,取 xx 对应的图灵机 MxMx,在 O(g(n))O(g(n)) 时间内模拟 Mx(x)Mx(x),如果结果是 11 输出 00,否则输出 11。那么显然 L(M)∈DTIME(g(n))L(M)∈DTIME(g(n))。如果 L(M)∈DTIME(f(n))L(M)∈DTIME(f(n)),那么存在图灵机 M′M′ 在时间 O(f(n))O(f(n)) 内判定 L(M)L(M),M′M′ 的字符串表示为 <M′><M′> 则有 M′(<M′>)=M(<M′>)M′(<M′>)=M(<M′>) 矛盾。
多项式时间可验证复杂性类 NPNP,一个语言 LL 属于 NPNP 当存在多项式函数 P:N→NP:N→N 和一个多项式时间图灵机 MM 满足对于任意 x∈{0,1}∗x∈{0,1}∗,x∈Lx∈L 当且仅当 ∃u∈{0,1}P(|x|)∃u∈{0,1}P(|x|) 满足 M(x,u)=1M(x,u)=1。此时也称 MM 是 LL 的验证机(verifier),uu 被称作 xx 的验证(certificate)。
定义 EXP=∪c≥0DTIME(2nc)EXP=∪c≥0DTIME(2nc),则有 P⊆NP⊆EXPP⊆NP⊆EXP。已经有证明 P⊊EXPP⊊EXP。
非确定性图灵机
NPNP 的最初定义是由非确定性图灵机(non-deterministic Turing machine/NDTM)引入的,NDTM 和 TM 的区别在于对于每个格局有多种可能的转移,只要存在一个分支接受一个输入即认为接受,只有所有分支都不接受即认为不接受。
同样类似地,我们可以定义在所有可能输入的所有分支都会停机的 NDTM 为判定机(decider),对于一个函数 T:N→NT:N→N,称一个 NDTM 运行时间为 T(n)T(n) 如果对于任意长度为 nn 的输入,其所有分支都在 T(n)T(n) 步骤内停机。
同样地,对于 T:N→NT:N→N,NTIME(T(n))NTIME(T(n)) 为可以被某些非确定性图灵机在 O(T(n))O(T(n)) 时间内解决的问题(判定的语言集合)。则有 NP=∪c≥0NTIME(nc)NP=∪c≥0NTIME(nc)。
两种 NPNP 的定义等价直接考虑验证 uu 与不确定性的关系即可。
多项式时间规约
两者关系只需要考虑 NPNP 中最难的那一类问题,使用归约的思想来定义难度。不过这里考虑的是时间复杂性,所以我们需要对归约过程做一点修改,就是在研究两种复杂性类的时候,归约过程不应该比其中更容易的复杂性类更复杂。在比较 PP 和 NPNP 过程中,规约过程应该只考虑多项式时间归约(Polynomial Time Reduction)。
多项式时间归约:称 AA 可以多项式时间归约到 BB,写作 A≤pBA≤pB 当存在一个多项式时间可计算函数 f:Σ∗→Σ∗f:Σ∗→Σ∗ 满足 ∀w,w∈A⇔f(w)∈B∀w,w∈A⇔f(w)∈B。
NP−hardNP−hard 和 NP−completeNP−complete
语言 LL 被称作是 NP−hardNP−hard 当且仅当 ∀A∈NP,A≤pL∀A∈NP,A≤pL。语言 LL 被称作是 NP−completeNP−complete 当且仅当 LL 是 NP−hardNP−hard 且 L∈NPL∈NP。
由此我们可以得出,对于 NP−completeNP−complete 中的任意语言 LL,L∈PL∈P 等价于 P=NPP=NP。由此我们只需要研究 NP−completeNP−complete 的那些语言。
布尔表达式(Boolean formulas)与 3SAT3SAT
变量 u1,u2,…,unu1,u2,…,un 的布尔表达式 φφ 由这些变量和三个逻辑运算符 ∧,∨,¬∧,∨,¬ 组成,¬u¬u 也可用 ¯u¯¯¯u 表示。φφ 也可以被视作一个布尔函数 {0,1}n→{0,1}{0,1}n→{0,1}。
文字(literal)是一个原子公式(的肯定)(positive)或一个原子公式的否定(negative),分别可以称作是文字和否文字。
析取(Disjunctive)类似或,析取子句(Disjunctive clause)是仅由或运算符/析取操作连接起来的文字组成的布尔表达式。
合取(Conjunctive)类似与,合取子句(Conjunctive clause)是仅由与运算符/合取操作连接起来的文字组成的布尔表达式。
φφ 是合取范式(CNF/Conjunctive Normal Form)当它是由若干析取语句的合取操作组成,形如 ∧i(∨jvi,j)∧i(∨jvi,j)。同样有析取范式(DNF/Disjunctive Normal Form)由若干合取语句的析取操作组成。这两个都是命题公式(propositional formula)的标准形式。
kkCNF 指每个语句只有 ≤k≤k 个文字。
Cook-Levin Theorem:定义语言 SATSAT 由所有可满足的 CNF 语句组成;语言 3SAT3SAT 由所有可满足的 33CNF 语句组成。则二者都是 NP−completeNP−complete 的。
SAT∈NPSAT∈NP:其验证即为一组合法的赋值。
∀L∈NP,L≤pSAT∀L∈NP,L≤pSAT:考虑验证机 MM 的计算过程,使用长度为多项式级别的 CNF 表达式描述。
SAT≤p3SATSAT≤p3SAT 知 3SAT∈NP−complete3SAT∈NP−complete。
更多 NPNP 相关例子
独立集(Independent Set)
INDSETINDSET 判断图 GG 是否有大小为 kk 的独立集,则 INDEST∈NP−completeINDEST∈NP−complete。
INDSET∈NPINDSET∈NP:验证为点集。
3SAT≤pINDSET3SAT≤pINDSET:考虑 3SAT3SAT 中的每一个子句,共有 23−123−1 种合法的状态,而且只有其中一个状态能够存在,于是连一个大小为 77 的团,而对于团外的任意两个状态,如果其冲突则连一条边,然后看是否有子句数量那么多的独立集即可。
点覆盖(Vertex Cover)
Vertex−CoverVertex−Cover 判断图 GG 是否有大小为 kk 的点覆盖,则 Vertex−Cover∈NP−completeVertex−Cover∈NP−complete。
Vertex−Cover∈NPVertex−Cover∈NP:验证为点集。
INDSET≤pVertex−CoverINDSET≤pVertex−Cover:有大小为 kk 的点覆盖,取反得到大小为 n−kn−k 的独立集。
0/1整数规划(0/1 Integer Programming)
IPROGIPROG 给定 mm 个有理数系数的线性约束,判断是否有合法的给每个变量赋 {0,1}{0,1} 满足每个约束的方法,则 IPROG∈NP−completeIPROG∈NP−complete。
IPROG∈NPIPROG∈NP:验证为一种合法赋值。
SAT≤pIPROGSAT≤pIPROG:析取子句每个文字和大于等于 11 即可。
哈密顿路径(Hamiltonian Path)
dHAMPATHdHAMPATH 判断有向图是否有哈密顿路径,则 dHAMPATH∈NP−completedHAMPATH∈NP−complete。
dHAMPATH∈NPdHAMPATH∈NP:验证是路径顺序。
SAT≤pdHAMPATHSAT≤pdHAMPATH:对于任意的 nn 个变量 mm 个子句的 SATSAT,每个变量构造 2m+22m+2 个点按顺序排列,相邻点连双向边,经过这些点时使用从左到右表示该变量取 11,从右到左表示该变量取 00。然后额外有开始点和结束点,接着我们按任意顺序确定每个变量的取值,也即将前一个变量的两个端点都连到下一个变量的两个端点,开始点和结束点同样如此操作,接着对于每个限制构造一个点,如果限制 jj 包含了 uiui,那么将第 ii 个变量的第 2j2j 个点连到限制 jj 的点再连到第 ii 个变量的第 2j+12j+1 个点,而如果包含 ¬ui¬ui 则反着来。不妨认为这里的第 2j2j 个点和第 2j+12j+1 个点互为匹配点。
首先如果存在合法赋值那么如此按照顺序走即可。
如果构造的图存在哈密顿回路,那么我们可以证明其必然是按照顺序走的,如果有通过限制构造的点跳跃的情况那么其匹配点只和一个额外点连接,就必须是结束点,矛盾,所以按照走的顺序依次给每个变量赋值即可。
同样有 dHAMCYCLEdHAMCYCLE 哈密顿环(Hamiltonoian Cycle),哈密顿路径很容易归约到哈密顿环(添加一个超级点连向所有点且被所有点连),所以也是 NP−completeNP−complete。
而无向图的情况容易变为有向图。
旅行商问题(TSP/Traveling Salesman)是否有长度小于等于 kk 的经过所有点的方案,显然可以由哈密顿路径归约。
coNPcoNP
语言 L∈coNPL∈coNP 当 ¬L∈NP¬L∈NP,有 P⊆NP∩coNPP⊆NP∩coNP。
另一种定义方式;语言 L∈coNPL∈coNP 当存在多项式函数 P:N→NP:N→N 和多项式时间图灵机 MM 满足对于任意 x∈{0,1}∗x∈{0,1}∗,有 x∈Lx∈L 当且仅当 ∀u∈{0,1}P(|x|)∀u∈{0,1}P(|x|) 有 M(x,u)=0M(x,u)=0。
类似的,我们有 coNP−completecoNP−complete,且 ¬SAT∈coNP−complete¬SAT∈coNP−complete。
NEXPNEXP
NEXP=∪c≥0NTIME(2nc)NEXP=∪c≥0NTIME(2nc)。
有 P⊆NP⊆EXP⊆NEXPP⊆NP⊆EXP⊆NEXP。
如果 P=NPP=NP,我们可以推出 EXP=NEXPEXP=NEXP。
空间复杂性(Space Complexity)
类似时间复杂性,在图灵机中,使用过的工作纸带格子(work tapes,注意输入纸带格子不算在内)被称作使用过的空间。定义函数 S:N→NS:N→N,如果图灵机 MM 对于任意长度 nn 的输入最多使用 S(n)S(n) 个工作纸带格子,那么我们可以称 MM 运行空间消耗为 S(n)S(n)。
称语言 L∈SPACE(S(n))L∈SPACE(S(n)) 当存在图灵机 MM 在空间 S(n)S(n) 判定 LL;类似的称 L∈NSPACE(S(n))L∈NSPACE(S(n)) 当存在非确定性图灵机 MM 在空间 S(n)S(n) 判定 LL。特别的要求 S(n)S(n) 可以在 S(n)S(n) 空间内计算。
由于不考虑输入纸带格子,所以 S(n)<nS(n)<n,然而一般要求 S(n)≥lognS(n)≥logn 因为要记录读到哪里了。
定理:DTIME(S(n))⊆SPACE(S(n))⊆NSPACE(S(n))⊆DTIME(2O(S(n)))DTIME(S(n))⊆SPACE(S(n))⊆NSPACE(S(n))⊆DTIME(2O(S(n)))。
格局图(Configuration Graph)
回忆图灵机的格局:状态,纸带头位置,所有的纸带内容。
对于一个空间 S(n)S(n) 的图灵机,工作纸带内容最多 S(n)S(n) 有用。
对于任意空间 S(n)S(n) 的(非确定性)图灵机 MM 和输入 x∈{0,1}∗x∈{0,1}∗,其对应的格局图是一个有向图,其中每个节点对应 MM 的所有可能的格局,从格局 CC 到 C′C′ 有边当且仅当根据 MM 的转移函数,CC 可以走一步到达 C′C′,这个图记作 GM,xGM,x。
可以修改 MM 使得接受格局只有一个 CacceptCaccept,则 MM 接受输入 xx 当且仅当 GM,xGM,x 中存在一条从 CstartCstart 到 CacceptCaccept 的有向路径。
如果 MM 空间为 S(n)S(n),则格局图中的每一个点都可以由 c(S(n))c(S(n)) 个比特位表示,在格局图上面 bfs/dfs 可以得到 NSPACE(S(n))⊆DTIME(2O(S(n)))NSPACE(S(n))⊆DTIME(2O(S(n)))。
空间复杂性类
PSPACE=∪c≥0SPACE(nc)PSPACE=∪c≥0SPACE(nc)。
NPSPACE=∪c≥0NSPACE(nc)NPSPACE=∪c≥0NSPACE(nc)。
L=SPACE(logn)L=SPACE(logn)。
NL=NSPACE(logn)NL=NSPACE(logn)。
注意到 NP⊆PSPACENP⊆PSPACE。
PATH=<G,s,t>PATH=<G,s,t> 表示有向图 GG 中是否存在 ss 到 tt 的路径,那么 PATH∈NLPATH∈NL,猜每一步往哪里走即可,而其是否属于 LL 还是 open 的。
Space Hierarchy Theorem:如果 f,gf,g 是空间可构造的函数满足 f(n)=o(g(n))f(n)=o(g(n)),那么有 SPACE(f(n))⊊SPACE(g(n))SPACE(f(n))⊊SPACE(g(n))。
PSPACEPSPACE-Completeness
语言 L∈PSPACE−hardL∈PSPACE−hard 当 ∀L′∈PSPACE∀L′∈PSPACE,L′≤pLL′≤pL;如果还有 L∈PSPACEL∈PSPACE,则称 L∈PSPACE−completeL∈PSPACE−complete。注意这里的 ≤p≤p 还是多项式时间归约。
带量词的布尔表达式(QBF/Quantified Boolean Formula)的正确性是 PSPACE−completePSPACE−complete 的。
QBF 是一个形如 ψ=Q1x1Q2x2…Qnxn,ϕ(x1,x2,…,xn)ψ=Q1x1Q2x2…Qnxn,ϕ(x1,x2,…,xn) 的布尔表达式,其中 QiQi 是 ∀∀ 或者 ∃∃,而 ϕϕ 是一个普通的布尔表达式。
定义 TQBFTQBF 为所有真的 QBF,其为 PSPACE−completePSPACE−complete。
具体而言解决 TQBFTQBF 的算法就是按照顺序递归枚举 xixi 的取值即可,由于空间可以重复利用所以容易发现其属于 PSPACEPSPACE。
对于任意 L∈PSPACEL∈PSPACE,令 MM 为在 S(n)S(n) 空间内判定 LL 的图灵机,考虑 MM 的格局图,令 m=O(S(n))m=O(S(n)) 为需要编码 MM 格局的比特数,则存在长度为 O(m)O(m) 的表达式 ϕM,xϕM,x 满足对于任意两个格局 C,C′C,C′,ϕM,x(C,C′)=1ϕM,x(C,C′)=1 当且仅当 CC 走一步可以到达 C′C′。
更一般地,我们可以构造一个多项式大小的 QBF ψiψi 满足对任意格局 C,C′C,C′,ψ(C,C′)=1ψ(C,C′)=1 当且仅当 GM,xGM,x 存在长度不超过 2i2i 的 CC 到 C′C′ 的有向路径。
取 ψ0=ϕψ0=ϕ,而 ψi(C,C′)=∃C″,ψi−1(C,C″)∧ψi−1(C″,C)ψi(C,C′)=∃C′′,ψi−1(C,C′′)∧ψi−1(C′′,C),不过该转移每次大小乘以 22 不够优秀,注意到:
而 A=B⇔(A∧B)∨(¬A∧¬B),A⇒B⇔¬A∨B,由此我们节省大小,记 Si 表示 ψi 的大小,我们有 Si=Si−1+O(m),进而我们找到了多项式时间归约方法。
综上 ∀L∈PSPACE,L≤pTQBF,由此 TQBF∈PSPACE−complete。
注意到上述证明没有要求 M 一定要是确定性图灵机,所以同样有 TQBF∈NPSPACE−hard,进而 PSPACE=NPSPACE。
Savitch's Theorem:更加一般化地,对于任意空间可构造函数 S:N→N 满足 S(n)≥logn,有 NSPACE(S(n))⊆SPACE(S(n)2)。
NL 和 L
由 Savitch's Theorem,我们知道 NL⊆L2=SPACE(log2n),而 NL 是否等于 L 仍然是 open 的。
一个函数 f:{0,1}∗→{0,1}∗ 是隐式对数空间可计算的(implicitly logspace computable),当:
- 存在常数 c 满足 ∀x,|f(x)|≤|x|c。
- 语言 Lf={<x,i>|f(x)i=1} 和 L′f={<x,i>|i≤|f(x)|} 属于 L。这两条限制分别保证了我们可以计算 f(x) 的每一位以及对于每个下标 i 判断是否有 i≤|f(x)|。
对数空间归约(Logspace reduction):B 可以对数空间归约到 C,记作 B≤lC,当存在隐式对数可计算函数 f:{0,1}∗→{0,1}∗ 满足 x∈B⇔f(x)∈C。
使用对数空间规约,由此有 NL−hard 和 NL−complete 的定义。
由格局图容易证明 PATH∈NL−complete。
NL 和 coNL
回忆 NL=NSPACE(logn)。
另一种等价定义:语言 L∈NL 当存在确定性图灵机 M(验证机)以及一个额外的仅读一次的输入纸带(这个指的是输入的验证 u),以及一个多项式函数 P:N→N 满足对于任意 x,x∈L 当且仅当存在 u∈{0,1}P(|x|) 满足 M(x,u)=1,其中 M 最多使用 O(log|x|) 额外工作纸带空间。
二者等价考虑验证和非确定性的关系即可。注意到仅读一次是因为 log|x| 的空间使得其无法记录之前所有的选择。
类似 coNP,我们可以定义 coNL,例如 ¬PATH={<G,s,t>} 满足 G 中不存在 s 到 t 的边,由于 PATH∈NL−complete,同样有 ¬PATH∈coNL−complete。
事实上可以证明 ¬PATH∈NL,从而 NL=coNL。
证明考虑定义 Si 表示 s 经过不超过 i 条边能够到达的点集,记 ci=|Si|,那么如果图灵机已知 ci,那么我们在证书中依次给出 Si 中按照编号排好序的点 x 以及 s 到达 x 的路径,那么我们就可以验证 x 确实属于 Si,而我们事实上是可以通过 ci 推出 ci+1 的,具体而言就是依次枚举每个点 y 判断 y 是否属于 Si+1,而判断方法依赖于证书依次给出 Si 中每个点 x 以及它们的到达方法(根据编号顺序以及 ci 可以验证证书正确性),然后扫到 x 的时候额外看一下是否有 x 到 y 的边,扫完 Si 中所有点后即可判定是否有 y∈Si+1,不断执行 n 次可以得到 ci+1 的大小。而我们知道 c0=|S0|=|{s}|,由此可以不断计算到 cn,根据其以及证书给出来的 Sn 即可验证 t 确实不可由 s 到达。
更加一般化地,有对于任意空间可构造函数 S(n)≥logn,有 NSPACE(S(n))=coNSPACE(S(n))。
总结:
多项式层次结构(the Polynomial Hierarchy)
注意到一些问题形如 EXACT INDSET 没有一些好的描述,不太能给出一个证书,你需要说明图 G 存在一个大小为 k 的独立集同时还要所有独立集大小小于等于 k,使用了一个存在量词和一个全称量词。
由此启发我们定义复杂性类 Σp2 表示所有语言 L 满足存在多项式时间图灵机 M 和一个多项式函数 q 满足 ∀x∈{0,1}∗,x∈L 等价于 ∃u∈{0,1}q(|x|)∀v∈{0,1}q(|x|),M(x,u,v)=1。
由此容易发现 NP⊆Σp2(忽略 v),而 coNP⊆Σp2(忽略 u)。
类似的我们可以定义 Σpi,表示的是拥有 i 个以 ∃ 打头的交替量词证书的语言。
继续定义 Πpi=coΣpi,表示的是拥有 i 个以 ∀ 打头的交替量词证书的语言。
由该定义可以看出 Σpi,Πpi⊆Σpi+1,Σpi,Πpi⊆Πpi+1。我们也可以认为有 Σpi+1=NPΠpi,Πpi+1=coNPΣpi,这里的 NP 和 coNP 的上角标表示的是使用的验证机所在的语言。
谕示机(Oracle TMs),又叫做预言机,类似于把一个语言当作黑箱用。具体而言谕示机有一个特殊的谕示纸带和三个特殊的状态 qquery,qyes,qno。在运行一个谕示机 M 的时候首先需要指定一个语言 O,用作谕示 MO(x),而后在 M 的运行过程中,任何时刻进入了 qquery 状态时,当谕示纸带输入在语言 O 中就会转移到 qyes 状态,否则转移到 qno 状态。
定义 PH=∪∞i=1Σpi=∪∞i=1Πpi,也即多项式层级(语言)。我们有定理,∀i 若 Σpi=Πpi,就有 PH=Σpi,由此可以得到 P=NP 蕴含着 PH=P。
一个语言 L 是 Σpi-complete 当 L∈Σpi 且 ∀L′∈Σpi,有 L′≤pL。对任意 i,定义 ΣiSAT={all QBFs of the form∃u1∀u2⋯Qiuiϕ(u1,⋯,ui)that are true},其中 ϕ() 是布尔表达式,那么 ΣiSAT 就是 Σpi-complete 的。
然而事实上不太可能存在 PH-complete 的语言,因为如果存在这样的语言 L,由之前的定理容易推出 ∃i 满足 PH=Σpi。
容易看出 PH⊆PSPACE。事实上如果 PH=PSPACE,那么说明 TQBF 是 PH-complete 的,由此 PH 语言必然坍缩(collapse)在某一层级。
布尔电路(Boolean Circuits)
基础
对于任意 n,n 输入 1 输出的布尔电路是一个拥有 n 个源(source,这里指的是入度为 0 的点)和 1 个汇(sink,这里指的是出度为 0 的点)的 DAG。所有非源节点都被叫做门(gates)并且被标记为 ∨,∧,¬ 中的一个。
对于布尔电路 C,其大小 |C| 定义为节点数量。
一个门连入边的数量叫做扇入(fan-in),而连出边的数量叫做扇出(fan-out):对于 ∨,¬,其扇入为 2,而 ¬ 扇入为 1;而布尔表达式中扇出都是 1,通用电路(General circuits)中扇出可以大于 1。
对于函数 T:N→N,一个 T(n) 大小的电路族是一列布尔电路 C1,C2,…,其中 Cn 有 n 个输入 1 个输出,且对任意 n 有 |Cn|≤T(n)。称一个语言 L∈SIZE(T(n)) 如果存在 T(n) 大小的电路族 C1,C2,…,满足对于任意 n 和 x∈{0,1}n 有 x∈L 当且仅当 Cn(x)=1。
一个 CNF/DNF 是一个特殊的电路。另外任意 n 个比特的布尔函数都可以被大小至多 n2n 的布尔电路计算。
P/poly
定义 P/poly 为可以被多项式大小的电路判定的语言类,也即 P/poly=∪c≥0Size(nc)。
有 P⊆P/poly,证明考虑任意语言 L 如果可以被 T(n) 运行时间的图灵机判定,则直接看它顺序经过的 T(n)+1 个格局 C0,⋯,CT(n),每一个后面的格局可以由前一个用 O(T(n)) 大小的 CNF 计算得到,而答案可以由 CT(n) 得到,于是就给出了一个 O(T(n)2) 大小的电路。
注意到如此构造电路深度同样为 O(T(n)),而且该电路不仅是多项式大小的,其本身也可以被一个图灵机在多项式时间内计算。这样的电路也叫做 P-uniform circuits。
P/poly 中事实上存在不可判定的语言。首先任意元语言(unary language,指形如 {1n|n∈S} 的语言)都在 P/poly 内,而存在不可判定的元语言,例如定义 UHALT={1n|the binary expression of n encodes a pair <M,x> such that TM M halts on x.},则通过计算编码知 HALT≤mUHALT。
对于 Cook-Levin Theorem 的另一视角
定义语言 CKT−SAT={all circuits (string representation) that are satifiable.},则其为 NP−complete,首先要证明 NP 很简单,而任取 NP 中语言 L,考虑其验证机 M 和证书 u,直接考虑计算 M 的布尔电路,相当于证书的输入端是可以任取的,也就是归约到证书任取是否有可满足的布尔电路,所以其为 NP−complete。
考虑证明 CKT−SAT≤pSAT,对于每条线路都定义一个变量,那么对于每个门实际上是一个等价限制 ↔,诸如 x↔y∨z 或 x↔y∧z 等,而这些所有的合取及转化为 SAT。
之前定义的 SAT 中限制了布尔表达式形式必须是 CNF,实际上可以拓展为只需要是若干个子句的合取范式即可,每个子句内部可以使用任意的 ∨,∧,¬,→,⊕,↔。
而在将 SAT 归约到 3SAT 问题时,同样先利用等价关系把每个子句限制为三个文字,此后直接考虑每个子句 ϕ 其八个不同输入的真值表,有 ¬ϕ 可以表示为那些输出为 0 的情况合取子句的析取,而取反后为析取子句的合取,从而归约到 3SAT。
布尔函数的电路大小
任何 n 比特布尔函数可以被最多 n2n 大小的布尔电路计算,事实上有个更小的下界,存在 n 个比特的布尔函数需要 Ω(2n/n) 大小电路。
证明直接考虑计数,n 比特的布尔函数有 22n 种,而大小为 T 的布尔电路最多有 (3(T2))T 种,有 (3(T2))T≥22n,有 T=Ω(2n/n)。
Uniformly Generated Circuits
定义:一个电路族 {Cn} 是 P-uniform 的当存在多项式时间图灵机 M,当输入为 1n 时输出为 Cn 的描述。(前文有提到过)
则有定理:一个语言 L 可以被 P-uniform 电路族计算当且仅当 L∈P。
定义:一个电路族 {Cn} 是 logspace-uniform 的当存在对数空间图灵机 M 输入 1n 时输出为 Cn 的描述。
则有定理:一个语言 L 有多项式大小的 logspace-uniform 电路判定当且仅当 L∈P。
拥有建议(Advice)的图灵机
定义:可以被 T(n) 事件附加 a(n) 比特建议的图灵机判定的语言类为 DTIME(T(n))/a(n)。
或者说可以理解为其包含所有 L 满足存在满足 αn∈{0,1}α(n) 的序列 {αn} 和图灵机 M 满足 ∀x∈{0,1}n 有 M(x,αn)=1 当且仅当 x∈L,并且 M 运行 O(T(n)) 步。
有定理:P/poly=∪c,dDTIME(nc)/nd。
⇒ 考虑在建议中直接给出整个电路的描述,由此图灵机只需要模拟电路即可。
⇐ 和 P⊆P/poly 类似?
Non-Uniform Size Hierarchy Theorem
直觉上来说拥有更大大小的电路族能够计算更多函数。
我们有定理:对任意函数 T,T′:N→N,其中 n<T(n)<T′(n)<2n/(100n) 并且 T(n)log2T(n)=o(T′(n)),我们有 SIZE(T(n))⊊SIZE(T′(n))。
证明:令 l=logT(n)+loglogT(n)+C 其中 C 为足够大常数 C>1。通过计数知存在函数 f:{0,1}l→{0,1} 需要电路大小 Ω(2l/l)>T(n),所以 f∉SIZE(T(n))。而 l2l=O(T(n)log2T(n))=o(T′(n)),所以 f∈SIZE(T′(n))。由此得证。
Karp-Lipton Theorem
Karp-Lipton Theorem:若 NP⊆P/poly,有 PH=Σp2。
证明过程:NP⊆P/poly⇒Π2SAT∈Σp2⇒Πp2⊆Σp2⇒PH=Σp2。
其中 Π2SAT={all QBFs of the form ∀u,∃v,ϕ(u,v)=1}。
要证明 Π2SAT∈Σp2,等价于要找到多项式时间图灵机 M 和多项式函数 q 满足对于任意 QBF ψ=∀u,∃v,ϕ(u,v),有 ψ 为真当且仅当 ∃u′∈{0,1}q(|x|),∀v′∈{0,1}q(|x|),M(ψ,u′,v′)=1。
注意到语言 L={<ϕ,u>,∃v,ϕ(u,v)=1}∈NP。由假设 NP⊆P/poly 知存在多项式大小电路族 {Cn} 判定 L,也即 ∃v,ϕ(u,v)=1⇔Cn(ϕ,u)=1。
利用搜索到判定的归约,我们可以找到另一个多项式大小电路族 {C′n} 能够输出这样一个 v,也即 ∀<ϕ,u> 由 ∃v,ϕ(u,v)=1 当且仅当 ϕ(u,C′n(ϕ,u))=1。
注意到 C′n 与 u,ϕ 无关,不妨用 w 表示 C′n 的描述,为多项式大小。于是有 ψ:=∀u,∃v,ϕ(u,v)=1 当且仅当 ∃w 描述 C′n 使得 ∀u,ϕ(u,C′n(ϕ,u))=1。
由此有 Π2SAT∈Σp2。
电路的深度(Depth)
电路深度与并行计算一个函数的能力相关。
定义:一个函数被称作拥有高效并行算法若对于大小 n 的输入可以被拥有 Poly(n) 级别的处理器在 Polylogn 时间内解决。
定义:一个语言在语言类 NCi 当存在常数 c>0 满足其可以被 logspace-uniform 大小 O(nc) 深度 O(login) 的电路族判定。NC=∪∞i=1NCi
定义:一个语言在语言类 ACi 当存在常数 c>0 满足其可以被 logspace-uniform 大小 O(nc) 深度 O(login) 的电路族判定,其中电路中的 AND/OR 门可以拥有无限的扇入。AC=∪∞i=1ACi。
对于任意 i≥0,NCi⊆ACi⊆NCi+1。
已知 NC0⊊AC0⊊NC1,其余还不确定是否为真子集。
定理:一个语言有高效并行算法当且仅当其在 NC 中。
随机计算
概率图灵机(Probabilistic TM/PTM)
概率图灵机(Probabilistic TM/PTM)是一个拥有两个转移函数 δ0,δ1 的图灵机,对于输入 x 的每次转移,以 0.5 概率选择 δ0 转移,以 0.5 概率选择 δ1 转移。每次选择是独立的。
PTM 也可以视作随机性是由一个额外纸带提供的。
同样地,称 M 运行时间为 T(n),若对任意输入 x,M 在 T(|x|) 步内停机。
对于时间函数 T:N→N 和语言 L,我们称一个 PTM M 在时间 T(n) 内判定 L 当 M 在 T(|x|) 步内停止且 Pr[M(x)=L(x)]≥2/3。
PTM 相关语言类
BPTIME(T(n)) 为可以被 PTM 在 O(T(n)) 时间内判定的语言类。
定义 BPP=∪cBPTIME(nc)。
BPP 另一种等价定义:语言 L∈BPP 当存在 PTM M 和多项式函数 p 满足对于任意 x∈{0,1}∗,有 x∈L⇒Prr∼Up(|x|)[M(x,r)=1]≥2/3,x∉L⇒Prr∼Up(|x|)[M(x,r)=1]<1/3。
RTIME(T(n)) 包含所有语言 L 满足存在 PTM M 运行时间 O(T(n)) 且对任意 x:
RP=∪c>0RTIME(nc)。
ZTIME(T(n)) 包含所有语言 L 满足存在 PTM M 运行时间期望 O(T(n)) 且对任意 x,当 M 在 x 上停机时有:
ZPP=∪c>0ZTIME(nc)。
立即有一些简单的性质 BPP=coBPP,RP⊆BPP,coRP⊆BPP,ZPP=RP∩coRP。
误差归约(Error Reduction)
BPP Error Reduction Theorem:L 为一个语言且存在多项式时间 PTM M 满足对于任意 x∈{0,1}∗,有 Pr[M(x)=L(x)]≥0.5+|x|−c,则对任意常数 d,存在一个多项式时间 TM M′ 满足对于任意 x∈{0,1}∗,有 Pr[M′(x)=L(x)]≥1−2−|x|d。
与其它复杂性类的关系
定理:BPP⊆P/poly。
取 L∈BPP,通过 error reduction,存在 M:{0,1}n×{0,1}m→{0,1} 满足对任意 x∈{0,1}n,Prr[M(x,r)≠L(x)]≤2−(n+1)。也就是说,对于每个 x,至多有 2m/(2n+1) 个 r 满足 M(x,r)≠L(x),称作是坏的 r。x 有 2n 个,所以最多有 2m/2 个坏的 r,也即存在 r∈{0,1}m 满足 M(x,r)=L(x)。
定理:BPP⊆Σp2∩Πp2。
由 BPP=coBPP,我们只需要证明 BPP⊆Σp2。
先用 error reduction,得到 M 使用 m=poly(n) 个随机比特满足 x∈L⇒Prr[M(x,r)=1]≥1−2−n 且 x∉L⇒Prr[M(x,r)=1]≤2−n。
取 k=⌈m/n⌉+1,考虑选取若干 u1,…,uk∈{0,1}m,对于 r∈{0,1}m,∨ki=1M(x,r⊕ui) 的含义究竟是什么。
对于 x∉L,有 Prr[M(x,r)=1]≤2−n,于是有 Prr[∃1≤i≤k,M(x,r⊕ui)=1]≤k2−n<1,也即存在 r 满足 ∨ki=1M(x,r⊕ui)=0。
对于 x∈L,有 Prr[M(x,r)=0]≤2−n,考虑 u1,…,uk 均匀独立随机取,有 Pru1,…,uk[∨iM(x,ui⊕r)=0]≤2−kn<2−m。由此 Pru1,…,uk[∃r,(∨iM(x,ui⊕r)=0)]<1,由此存在 u1,…,uk∈{0,1}m,满足对于任意 r∈{0,1}m,有 ∨iM(x,r⊕ui)=1。
于是我们得到 x∈L 等价于存在 u1,…,uk∈{0,1}m 满足对于任意 r∈{0,1}m 有 ∨iM(x,r⊕ui) 为真。由此得证 BPP⊆Σp2。
空间相关类
对于 PSPACE,没有必要尝试多项式长度的随机,毕竟可以直接枚举尝试所有可能的点。
考虑 O(logn) 的工作空间,我们有 BPL 和 RL 类,定义类似 BPP 和 RP。
有 RL⊆NL⊆P,同样 BPL⊆P,且 BPL⊆L3/2。
交互式证明
定义
考虑多次交互来验证一个计算某个语言的函数是否正确。
两个部分,分别是 Prover 和 Verifier,一般认为 Prover 是无限强大的,而对 Verifier 则有一定的限制。交互过程形如每次先将语言的一个实例输入给 Prover 和 Verifier,然后 Verifier 根据这个实例给定 Prover 一个输入,Prover 根据实例和 Verifier 的输入给 Verifier 一个输出,不断重复该过程。
使用形式化语言描述交互过程:对于函数 f,g:{0,1}∗→{0,1}∗,k 为整数,一个 f 与 g 之间的 k 轮交互,记作 <f,g>(x),指的是如下定义的字符串序列 a1,a2,…,ak∈{0,1}∗:
f 最终的输出,记作 Outf<f,g>(x),定义为 f(x,a1,…,ak)∈{0,1}。
考虑确定性交互证明(Deterministic Interactive Proofs/DIP),称一个语言 L 有 k 轮确定性交互证明系统当存在一个 DTM V 满足对于输入 x,a1,…,ai 运行时间为 Poly(|x|) 并且存在一个 k 轮的与任意函数 P 的交互满足:
上一条被称作完备性(completeness),下一条被称作可靠性(soundness)。
由于都是确定性的,容易看出 DIP 其实很弱,事实上 DIP=NP,考虑 a1,…,ai 刚好对应 NP 里的证书。
考虑非确定性的 Verifier。称一个语言 L 属于 IP[k] 当存在多项式时间的 PTM V 有和任意函数 P:{0,1}∗→{0,1}∗ 有一个 k 轮交互:
同样上一条完备性,下一条良好性。
定义 IP=∪c≥0IP(nc)。
很显然通过常数次独立询问可以将出错概率减到指数小。
首先有 IP⊆PSPACE。
考虑 IP 的定义,Prover 对于 Verifier 来说可以算是一个黑盒,所以事实上我们可以直接枚举 Prover 每次给 Verifier 的返回值,找到其中最优的,于是即可判断,容易发现这可以在 PSPACE 中完成。
图不同构问题(Graph Non-Isomorphism/GNI)
判断两个图 G1,G2 是否不同构,该问题属于 IP。
具体而言,将两个图给 Verifier 和 Prover,Verifier 随机选择一个下标 i∈{1,2},然后将 Gi 编号随机打乱给 Prover 要他判断这是哪张图,如果二者同构则 Prover 无法判断,失败概率 1/2,尝试多次即可将该概率减小到指数小。
IP 有多强
coNP⊆IP
考虑 #SAT 表示有多少种赋值方式可以满足某个 CNF,具体而言 <ϕ,k> 属于该语言当 ϕ 为 CNF,且恰有 k 种赋值方式可以使得 ϕ 为真。
使用计数问题来描述,xi 取真表示取 1,取假表示取 0,则 xi∧xj=xi⋅xj,xi∨xj=1−(1−xi)(1−xj),¬xi=1−xi。由此我们可以把一个 CNF ϕ 用一个多元多项式 Pϕ(x1,x2,…,xn) 来描述,我们的问题变成判断以下等式是否成立:
注意到某个 xi 在 P(x1,x2,…,xn) 的次数最多为 n 次。
如此递归构造交互式证明系统:首先找一个较大的质数 p,让判定该等式膜 p 意义下进行。对于第 i 次判定形式化为判断是否有 ∑bi∈{0,1}∑bi+1∈{0,1}⋯∑bn∈{0,1}Pϕ(a1,…,ai−1,bi,…,bn)=vi,要求 Prover 给出一个多项式 si(xi)=∑bi+1∈{0,1}⋯∑bn∈{0,1}Pϕ(a1,…,ai−1,xi,bi+1,…,bn),然后看 si(0)+si(1) 是否等于 vi,如果不相等直接返回 reject,如果相等考虑到 Prover 可能会作弊返回假的 si,所以我们还需要验证 si 的正确性,随机取 0≤ai<p,求出 vi+1=si(ai),然后递归验证。
考虑递归到底层,需要判断是否有 Pϕ(a1,…,an)=vn+1,这个直接计算可得。
注意到如果存在一次 Prover 给出了假的 si,那么其和真的差次数最多为 n,最多有 n 个根,所以在后续验证正确的前提下,这一次找到的 ai 出现破绽的概率最多为 1−n/p。由此 Prover 作弊了 Verifier 找到错误的概率大于等于 (1−n/p)n≥1−n2/p,取 p 足够大即可,而验证 p 是质数可以 Miller-Rabin。
注意到 #SAT 显然强于 ¬SAT,所以有 coNP⊆IP。
PSPACE=IP
考虑一般化到 TQBF,∀ 对应 ∏ 而 ∃ 对应 ∑,将 TQBF 转化为表达式后问题变为判断是否有:
问题在于由于使用了 ∏ 每个变量的次数可以提升到 2n 级别,这是不可接受的,注意到当 xi∈{0,1} 时有对于任意非负整数 t 满足 xti=xi,所以次数其实没有多大意义,定义降次操作 Li(P(x1,x2,…,xn)) 为:
等价于将第 i 个变量 xi 最高次数强行转化为 1,问题变为判断是否有:
同样取大质数 p,然后递归地拆每一层往下判断,这样可以保证拆到任意层的需要返回的多项式次数最多是 2。
具体而言拆 ∏ 返回 si() 判断是否有 si(0)si(1)=k,拆 ∑ 返回 si() 判断是否有 si(0)+si(1)=k,拆 Li 有点复杂,返回 si() 判断是否有 aisi(1)+(1−ai)si(0)=k(ai 是之前每一步确定好的值)。
和上面类似,于是我们可以得到 TQBF∈IP,而 TQBF 是 PSPACE−complete 的,而之前我们有过 IP⊆PSPACE,所以立即有 IP=PSPACE。
MIP
考虑多个无法交流的 Prover 的情形,那么我们的 Verifier 可以让它们之间交叉验证,可以证明多个 Prover 有任意多项式级别个 Prover 等价于只有两个,且我们有 MIP=NEXP。
AM
需要注意我们 IP 中 Verifier 的随机性 Prover 是无法得知的,而有一个复杂性类类似 IP,不过随机的过程是对 Prover 公开的(Public coin,公开抛硬币),由此定义 AM[k] 为 IP[k] 的子集且每次 Verifier 给 Prover 的信息都会包含 Verifier 所用到的所有随机比特。
我们有性质 AM[2]=BP⋅NP,且对于任意常量 k≥2 有 AM[k]=AM[2]。
事实上有 IP[k]⊆AM[k+2]。
GNI∈AM[2]
只有两轮交互,也就是 Verifier 问一次而 Prover 回答一次。
考虑关于 G1,G2 的一个集合:
其中 Aut(H) 表示 H 的自同构函数集合,那么容易发现 G1≅G2 则 |S|=2n!,否则 |S|=n!。
考虑对于任意集合 S,对于某个 K,构造一个交互过程使得当 |S|≥K Verifier 大概率接受而 |S|≤K/2 时 Verifier 有概率拒绝。
具体而言考虑随机哈希函数。
令 Hn,k 为 {0,1}n→{0,1}k 的函数集合,称 Hn,k 是两两独立的当 ∀x,x′∈{0,1}n,y,y′∈{0,1}k,有:
令 GF(2n) 表示一个包含至少 2n 个元素的有限域,如此构造 Hn,n={ha,b}a,b∈GF(2n),其中 ha,b 为 GF(2n)→GF(2n) 上的函数满足 ha,b(x)=ax+b,根据域中每个非零元素可逆知其为两两独立的。
Hn,k 直接截断 Hn,n 的输出为 k 个比特即可。
对于任意可以验证的语言 S⊆{0,1}m(有一个证书可以判定每个字符串是否属于 S),双方知道一个数字 K 满足 2k−2<K≤2k−1。
Verifier 每次随机选择 Hm,k 中的一个元素 h,随机取 y∈{0,1}k,然后将 h,y 发给 Prover。
Prover 目的是尝试寻找一个 x∈S 满足 h(x)=y,然后将 x 以及其证书发给 Verifier 以供验证。如果 Prover 成功这么做了 Verifier 就同意否则拒绝。
考虑这么交互下 Prover 能够正确返回的概率。不妨令 |S|≤2k−1,那么对于 p=|S|/2k,有:
上界根据 |h(S)|≤|S| 立即得到。
下界事实上有对任意的 y,Prh∈Hm,k[∃x∈S,h(x)=y]≥3p4。令 Ex 表示事件 h(x)=y,那么有
由此我们考虑验证上面关于 G1,G2 给出的集合 S 是等于 2n! 还是 n!,令 K=2n!,K∈(2k−2,2k−1],那么这样进行一次验证,当 G1≆G2 时接受概率 ≥34K2k,而当 G1≅G2 时接受概率 ≤0.5K2k。多路并行询问一次,然后使用投票可以使得成功概率较大。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人