离散概率本质是计数问题。所以如果想要进一步研究由概率图灵机定义的复杂性类(比如PP),一个很自然的角度是研究计数问题的复杂性类。
到目前为止,我们讨论的都是判定问题。判定问题的输出只能是0或1,也就是说判定问题可以看作一类特殊的计数问题。然而直观上就可以接受,计数问题的难度可能远超判定问题的难度。下面我们通过有向图的简单环计数问题为例来说明这一点。
有向图的简单环计数(♯CYCLE)
有向图上一个不包含重复点的环称为简单环(simple cycle,这里不考虑自环)。有向图的简单环判定问题是多项式可解的(比如,我们只需要在DFS的过程中记录时间戳就可以求解强连通分量,从而通过强连通分量的大小判定是否存在简单环),然而有向图的简单环计数问题(♯CYCLE)是难的。我们证明,假设有向图的简单环计数问题(♯CYCLE)有多项式图灵机可解,那么P=NP。
关键的观察是,哈密顿回路判定问题(一个NP-complete问题)可以归约到♯CYCLE。对于一个给定的有向图G,我们可以构造有向图G′,其中对G的每条边u→v做拆分使得单看u→v恰好有2m条不同路径(交叉构造,此过程是多项式的)。取m=nlogn,我们可以做如下分析:如果G存在哈密顿回路,那么G′上简单环的个数至少为(2m)n=2n2logn=nn2;如果G不存在哈密顿回路,那么G上简单环的个数至多nn−1个,所以G′上简单环的个数至多nn−1⋅(2m)n−1=nn2−1个。所以如果调用多项式的♯CYCLE计数程序统计G′上简单环的个数,就可以通过环的个数是否超过nn2判定G上是否存在哈密顿回路,整个过程是多项式的。那么我们就可以多项式解决NP-complete问题,所以P=NP。
计数复杂性类
FP与♯P
多项式时间可解的计数问题类可以用确定性图灵机定义,记为FP(函数多项式时间复杂性类,Function Polynomial time complexity class)。具体的,如果存在一个确定性图灵机计算函数f:{0,1}∗→N,就令f∈FP。
容易发现,如果我们承认P=NP,那么上一节中提到的♯CYCLE并不在FP内。我们关心这样的计数问题,尽管它本身不是多项式可解的,但是它的解都是多项式可验证的。这类问题也应当构成一个复杂性类,这个类和FP的关系就好像NP和P的关系一样。我们把这个类称为♯P。和NP类一样,这个复杂性类可以用确定性图灵机定义,也可以用非确定性图灵机定义。用确定性图灵机定义:f∈♯P当且仅当存在确定性图灵机M满足f(x)=∣{y∈{0,1}p(∣x∣)∣M(x,y)=1}∣,这里的y相当于一个用来验证的解;用非确定性图灵机定义:如果存在非确定性图灵机N判定某个L∈NP,并且在N上输入x时(多项式时间内)恰好有f(x)条路径停机输出1,就称函数f∈♯P。
自然地,有FP⊆♯P,并且♯P=FP⟹NP=P。因为判定问题是一类特殊的计数问题,如果♯P⊆FP,也即一切非确定性图灵机多项式可计算的计数问题都存在确定性图灵机在多项式时间计算,那么一切非确定性图灵机多项式可判定的判定问题都存在确定性图灵机在多项式时间内判定,因此NP⊆P,所以NP=P。
还可以证明,P=PSPACE⟹♯P=FP。对于任何f∈♯P,我们要证明f∈FP。因为f∈♯P,存在一台确定性图灵机M使得f(x)=∣{y∈{0,1}p(∣x∣)∣M(x,y)=1}∣。于是我们可以构造一台确定性图灵机枚举y,这样就能以多项式空间求出f(x)。具体的,由于PSPACE是定义在判定问题上的,我们可以构造一系列PSPACE的图灵机用来判定f(x)的各个二进制位是否为1。既然P=PSPACE,这一系列图灵机都是P的。因此计算f(x)的图灵机自然是FP的。
注意到,PP类可以看作♯P类的判定版本,后者是数满足某一性质的解的个数,前者是判定满足某一性质的解是否超过一半。那么如果FP=♯P,也即如果计数是多项式时间的,那么PP也一定是多项式时间的。所以FP=♯P⟹P=PP。能不能反过来证明,PP=P⟹FP=♯P也成立呢?也就是证明PP=P⟹♯P⊆FP呢?答案是肯定的。这里的核心观察是,我们可以用二分法把计数问题转化为判定问题,二分的次数是多项式次(因为总数是指数的),而如果判定过程有多项式算法,那么整个二分也就是多项式算法了。具体证明如下:Pf. 设f∈♯P,那么根据定义存在确定性图灵机M满足f(x)=∣{y∈{0,1}p(∣x∣)∣M(x,y)=1}∣。基于M,我们可以任取一ℓ∈{0,1}p(∣x∣),定义一个图灵机Mℓ,它接受输入x和一个∣p(x)∣+1位的二进制串b∥y,若b=1则Mℓ(x,b∥y)=M(x,y),若b=0则Mℓ(x,b∥y)=1[y<ℓ]。把b∥y看作随机串,Mℓ就对应着一台接受输入x的概率图灵机Pℓ,Pℓ(x)=1当且仅当f(x)+ℓ>22p(∣x∣)+1=2p(∣x∣)。设Pℓ判定预言L,则L∈PP。由前提PP=P,L∈P。所以,∀ℓ∈{0,1}p(∣x∣),我们能够多项式时间判定是否成立f(x)>2p(∣x∣)−ℓ。注意到2p(∣x∣)−ℓ的取值范围恰好也是{0,1}p(∣x∣),所以我们可以在整个值域上二分。Qed. 所以最终我们得到PP=P⟺FP=♯P。
♯P-completeness
一个自然的问题是,如何定义♯P中最难的问题?也就是问,如何定义计数问题之间的(多项式)归约?我们依然可以通过oracle来定义:函数f能多项式归约到g的含义是,通过带有oracle g的确定性图灵机计算多项式时间能够计算f。也即f∈FPg。由此,f是♯P-hard问题当且仅当∀g∈♯P,g∈FPf。如果进一步满足f∈♯P,则称f是♯P-complete问题。
♯SAT问题是♯P-complete的。顾名思义,♯SAT问题中这样一个函数,输入一个CNF(对应的二进制串),输出满足这个CNF的可满足赋值个数。(和证明SAT是NP-complete的过程很相似)
01矩阵的permanant(积和式)计算是♯P-complete的。这是为Valiant定理。矩阵A的permanant定义为perm(A)=σ∈Pn∑i=1∏nAi,σ(i)。注意到矩阵的行列式定义为det(A)=σ∈Pn∑(−1)sw(σ)i=1∏nAi,σ(i) ,sw(σ)表示permutation σ的逆序对个数。行列式可以在高斯消元的过程中顺带算出,因此由多项式时间算法。而Valiant定理告诉我们,作为计数问题的permanant问题尽管和行列式相比只差了一个逆序对的系数,却没有多项式时间算法(在P=NP的假设下)。
同样用二分法把计数问题转化为判定问题的思想,可以证明PPP=P♯P。这意味着PP和♯P在作为oracle的复杂性类意义下是等价的。因为♮SAT是PP-complete的,♯SAT是♯P-complete的,因此只需证明P♮SAT=P♯SAT。下证P♮SAT⊆P♯SAT:∀L∈P♮SAT,设图灵机M♮SAT判定L,我们可以基于此设计M♯SAT,在前者调用♮SAT oracle时,我们只需调用♯SAT判断结果是否超过总赋值个数的一半,也可以得到相同的结果,因此L∈P♯SAT。下证P♯SAT⊆P♮SAT:∀L∈P♯SAT,判定L的图灵机M至多调用多项式次♯SAT oracle,对于每一次调用我们只需用♮SAT二分也可以得到相同的结果,而二分的次数是多项式次的,因此L∈P♮SAT。