离散概率本质是计数问题。所以如果想要进一步研究由概率图灵机定义的复杂性类(比如\(\text{PP}\)),一个很自然的角度是研究计数问题的复杂性类。
到目前为止,我们讨论的都是判定问题。判定问题的输出只能是\(0\)或\(1\),也就是说判定问题可以看作一类特殊的计数问题。然而直观上就可以接受,计数问题的难度可能远超判定问题的难度。下面我们通过有向图的简单环计数问题为例来说明这一点。
有向图的简单环计数(\(\sharp\texttt{CYCLE}\))
有向图上一个不包含重复点的环称为简单环(simple cycle,这里不考虑自环)。有向图的简单环判定问题是多项式可解的(比如,我们只需要在DFS的过程中记录时间戳就可以求解强连通分量,从而通过强连通分量的大小判定是否存在简单环),然而有向图的简单环计数问题(\(\sharp\texttt{CYCLE}\))是难的。我们证明,假设有向图的简单环计数问题(\(\sharp\texttt{CYCLE}\))有多项式图灵机可解,那么\(\text{P}=\text{NP}\)。
关键的观察是,哈密顿回路判定问题(一个\(\text{NP}\)-complete问题)可以归约到\(\sharp\texttt{CYCLE}\)。对于一个给定的有向图\(G\),我们可以构造有向图\(G'\),其中对\(G\)的每条边\(u\to v\)做拆分使得单看\(u\to v\)恰好有\(2^m\)条不同路径(交叉构造,此过程是多项式的)。取\(m=n\log n\),我们可以做如下分析:如果\(G\)存在哈密顿回路,那么\(G'\)上简单环的个数至少为\((2^m)^n=2^{n^2\log n}=n^{n^2}\);如果\(G\)不存在哈密顿回路,那么\(G\)上简单环的个数至多\(n^{n-1}\)个,所以\(G'\)上简单环的个数至多\(n^{n-1}\cdot (2^m)^{n-1}=n^{n^2-1}\)个。所以如果调用多项式的\(\sharp\texttt{CYCLE}\)计数程序统计\(G'\)上简单环的个数,就可以通过环的个数是否超过\(n^{n^2}\)判定\(G\)上是否存在哈密顿回路,整个过程是多项式的。那么我们就可以多项式解决\(\text{NP}\)-complete问题,所以\(\text{P}=\text{NP}\)。\(\newcommand{\SP}{\sharp\text{P}}\)\(\newcommand{\FP}{\text{FP}}\)
计数复杂性类
\(\FP\)与\(\SP\)
多项式时间可解的计数问题类可以用确定性图灵机定义,记为\(\text{FP}\)(函数多项式时间复杂性类,Function Polynomial time complexity class)。具体的,如果存在一个确定性图灵机计算函数\(f:\{0,1\}^*\to \N\),就令\(f\in \text{FP}\)。
容易发现,如果我们承认\(\text{P}\neq \text{NP}\),那么上一节中提到的\(\sharp\texttt{CYCLE}\)并不在\(\text{FP}\)内。我们关心这样的计数问题,尽管它本身不是多项式可解的,但是它的解都是多项式可验证的。这类问题也应当构成一个复杂性类,这个类和\(\text{FP}\)的关系就好像\(\text{NP}\)和\(\text{P}\)的关系一样。我们把这个类称为\(\sharp\text{P}\)。和\(\text{NP}\)类一样,这个复杂性类可以用确定性图灵机定义,也可以用非确定性图灵机定义。用确定性图灵机定义:\(f\in \sharp\text{P}\)当且仅当存在确定性图灵机\(\mathbb{M}\)满足\(f(x)=|\{y\in \{0,1\}^{p(|x|)}\}\mid \mathbb{M}(x,y)=1|\),这里的\(y\)相当于一个用来验证的解;用非确定性图灵机定义:\(\forall L\in \text{NP}\),存在非确定性图灵机\(\N\)判定\(L\),如果在\(\N\)上输入\(x\)时多项式时间内恰好有\(f(x)\)条路径停机输出\(1\),就称函数\(f\in \sharp\text{P}\)。
自然地,有\(\text{FP}\subseteq \sharp\text{P}\),并且\(\sharp\text{P}=\text{FP}\implies \text{NP}=\text{P}\)。因为判定问题是一类特殊的计数问题,如果\(\sharp \text{P}\subseteq \text{FP}\),也即一切非确定性图灵机多项式可计算的计数问题都存在确定性图灵机在多项式时间计算,那么一切非确定性图灵机多项式可判定的判定问题都存在确定性图灵机在多项式时间内判定,因此\(\text{NP}\subseteq \text{P}\),所以\(\text{NP}=\text{P}\)。
还可以证明,\(\text{P}=\text{PSPACE}\implies \sharp\text{P}=\text{FP}\)。对于任何\(f\in \sharp\text{P}\),我们要证明\(f\in \text{FP}\)。因为\(f\in \sharp\text{P}\),存在一台确定性图灵机\(\mathbb{M}\)使得\(f(x)=|\{y\in\{0,1\}^{p(|x|)}\mid \mathbb{M}(x,y)=1\}|\)。于是我们可以构造一台确定性图灵机枚举\(y\),这样就能以多项式空间求出\(f(x)\)。具体的,由于\(\text{PSPACE}\)是定义在判定问题上的,我们可以构造一系列\(\text{PSPACE}\)的图灵机用来判定\(f(x)\)的各个二进制位是否为\(1\)。既然\(\text{P}=\text{PSPACE}\),这一系列图灵机都是\(\text{P}\)的。因此计算\(f(x)\)的图灵机自然是\(\text{FP}\)的。
注意到,\(\text{PP}\)类可以看作\(\sharp\text{P}\)类的判定版本,后者是数满足某一性质的解的个数,前者是判定满足某一性质的解是否超过一半。那么如果\(\FP=\SP\),也即如果计数是多项式时间的,那么\(\text{PP}\)也一定是多项式时间的。所以\(\FP=\SP\implies \text{P}=\text{PP}\)。由二分法可证\(\text{PP}=\text{P}\implies \FP=\SP\)也成立。所以我们得到\(\text{PP}=\text{P}\iff \FP=\SP\)。
\(\SP\)-completeness
一个自然的问题是,如何定义\(\SP\)中最难的问题?也就是问,如何定义计数问题之间的(多项式)归约?我们依然可以通过oracle来定义:函数\(f\)能多项式归约到\(g\)的含义是,通过带有oracle \(g\)的确定性图灵机计算多项式时间能够计算\(f\)。也即\(f\in \FP^g\)。由此,\(f\)是\(\SP\)-hard问题当且仅当\(\forall g\in \SP\),\(g \in \FP^f\)。如果进一步满足\(f\in\SP\),则称\(f\)是\(\SP\)-complete问题。
\(\sharp\texttt{SAT}\)问题是\(\SP\)-complete的。顾名思义,\(\sharp\texttt{SAT}\)问题中这样一个函数,输入一个CNF(对应的二进制串),输出满足这个CNF的可满足赋值个数。(和证明\(\texttt{SAT}\)是\(\text{NP}\)-complete的过程很相似)
01矩阵的permanant(积和式)计算是\(\SP\)-complete的。这是为Valiant定理。矩阵\(A\)的permanant定义为\(\texttt{perm}(A)=\sum\limits_{\sigma\in P_n}\prod\limits_{i=1}^n A_{i,\sigma(i)}\)。注意到矩阵的行列式定义为\(\det(A)=\sum\limits_{\sigma\in P_n}(-1)^{sw(\sigma)}\prod\limits_{i=1}^n A_{i,\sigma(i)}\)\(,sw(\sigma)\)表示permutation \(\sigma\)的逆序对个数。行列式可以在高斯消元的过程中顺带算出,因此由多项式时间算法。而Valiant定理告诉我们,作为计数问题的permanant问题尽管和行列式相比只差了一个逆序对的系数,却没有多项式时间算法(在\(\text{P}\neq\text{NP}\)的假设下)。