Skip to content

定义Definition

计数复杂性类 #P

Sharp-P · #P

可高效验证的见证计数类;由前缀计数构造均匀生成器,并给出近似计数到近均匀采样的完整误差预算。

形式陈述 ​

严格定义:数见证,而非输出是或否 ​

函数 f:{0,1}∗→N 属于 #P,当且仅当存在一个多项式 p 和一个确定性多项式时间谓词 R,使得

f(x)=|{y∈{0,1}p(|x|):R(x,y)=1}|.

x 是输入,y 是候选见证;R 负责检查它是否合格。见证长度由输入长度的一个多项式统一控制。等价地,f(x) 是某台非确定性多项式时间机器在输入 x 上的接受计算路径数。[1]

这种等价可以直接理解:机器逐位猜出 y,然后运行验证器,每个合格的 y 对应一条接受路径。反方向则把非确定性选择编码为见证。若不同路径的长度不同,需要采用唯一的补齐编码;随意允许末尾填入任意比特,会人为把同一条路径计数多次。

因此,#P 是一个函数类,而 NP 是一个判定语言类,不能不加解释地写成“NP 包含在 #P 中”。正确的联系是:对上述计数函数,语言

Lf={x:f(x)>0}

属于 NP;反过来,每个 NP 语言都可以写成某个 #P 函数的正值集合。存在性保留了“零还是非零”,却丢弃了具体数量。

虽然 f(x) 可以达到 2p(|x|),其二进制表示至多需要 p(|x|)+1 位。精确计数的困难不是答案本身长得写不下,而是如何从隐式描述中计算它。[1]

本页的生成接口:能数每个前缀的延伸 ​

固定见证长度 m=p(|x|),写

Wx={y∈{0,1}m:R(x,y)=1},Cx(u)=|{z∈{0,1}m−|u|:R(x,uz)=1}|.

这里 u 是长度至多 m 的前缀,空前缀记为 λ。于是

Cx(λ)=|Wx|,Cx(u)=Cx(u0)+Cx(u1)(|u|<m),Cx(y)=R(x,y)(|y|=m).

输入为 (x,u) 的延伸计数本身也在 #P 中:验证器把候选后缀接到 u 后,再运行 R。若统一见证长度的定义要求更长编码,多出的位必须唯一补零,不能任意填充。本页以下生成算法假设能查询这些 Cx(u),而不是已经拥有普通多项式时间的 #P 求解器。

若只给某个特定问题族的原始计数器,则还要证明保计数的前缀自约化:能把 (x,u) 转成该族中编码长度仍为多项式的新实例,其解恰对应原前缀的延伸。比如SAT可以固定前缀变量、化简公式,并明确保留剩余变量全集。一个剩余变量不再出现在公式中,仍应贡献两种赋值。只有“属于 #P”并不自动提供这个族自己的自约化算法或近似计数器。

直觉

从“有没有”走向“有多少” ​

给一个布尔公式,问“是否存在使它为真的赋值”,只需回答是或否;问“共有多少个这样的赋值”,则要返回一个整数。前者是判定问题,后者是计数问题。#P 刻画能够在多项式时间内验证的见证,其数量有多大,读作 sharp P。

例如,公式 φ=(x∨y)∧(¬x∨z) 的满足赋值数是 4:当 x=0 时,必须 y=1,而 z 任意;当 x=1 时,必须 z=1,而 y 任意。两种情况各贡献 2 个赋值。判定算法只需找到其中一个,计数算法必须正确合并全部情况,既不遗漏,也不重复。

例子与边界

两个典型对象:赋值与匹配 ​

#SAT 输入一个布尔公式,输出满足赋值数。见证就是对所有变量的完整赋值,验证器把赋值代入公式。变量集合必须明确:额外加入一个未被约束的新变量,会让满足赋值数翻倍,却不改变原公式是否可满足。这展示了计数问题对编码细节的敏感性。

另一个例子是 0–1 矩阵 A 的 permanent:

perm(A)=∑σ∈Sn∏i=1nAi,σ(i).

把矩阵看作一个二分图的邻接矩阵。置换 σ 为每个左侧顶点指定不同的右侧顶点;乘积为 1 恰好表示这些边都存在。因此 permanent 数的是完美匹配。

取

A=(110101011).

可行的列选择只有 (1,3,2) 和 (2,1,3),所以 perm(A)=2。它与行列式的外形相似,但没有置换符号带来的正负抵消;不能把行列式的高斯消元算法直接套到这里。

二分图是否有完美匹配可在多项式时间内判断,而精确计算其数量是 #P 完全问题。这比“找到一个解后继续找”更能说明计数与判定的差别:存在性很容易,也不代表总数很容易。[1][2]

完全性必须附带归约类型 ​

#SAT 在保计数归约下是 #P 完全的。这类归约构造实例 g(x),并精确保留答案:f(x)=#SAT(g(x))。它要求原见证与新见证之间存在不会增减数量的对应,单纯保留“有解当且仅当有解”不够。

对于 0–1 permanent,本条采用多项式时间 Turing 归约的完全性陈述:允许算法多次调用 permanent 计数 oracle,并进行多项式时间的额外计算。不能把它自动改写成从 #SAT 出发的保计数归约;若存在后一种归约,结合完美匹配存在性的多项式算法,就会得到 SAT 的多项式判定算法。[1][2]

这一点也影响“#P-hard”的理解:需要说明精确计算还是近似计算、允许哪种归约。精确计数的困难性结论,不会自动变成某个误差标准下的近似困难性结论。

显式 DNF 的满足赋值计数提供了具体的近似边界:覆盖抽样算法利用每个合取项易于计数和抽样的结构,给出 FPRAS,在关于输入长度、逆精度和对数逆失败概率的多项式时间内得到相对近似。这个结论依赖输入已经是显式 DNF;任意公式转换为 DNF 可能指数膨胀,因此它不自动推广到一般 #SAT。

推论与应用

计数怎样连接概率与判定 ​

若从 {0,1}p(|x|) 均匀抽取见证,则

Pr[R(x,Y)=1]=f(x)2p(|x|).

于是精确计数等价于求出这个实验的精确接受概率。NP 判断接受路径是否存在;PP 的典型描述判断接受路径是否超过全部路径的一半。不同复杂性类在这里对应对同一组路径提出的不同问题。

如果所有 #P 函数都能在确定性多项式时间内精确计算,那么检查计数是否为零就能解决所有 NP 问题,因而 P=NP。反向推理却不能靠“找到一个见证后逐个删除”完成:见证可能有指数多个。

Toda 定理进一步给出 PH⊆P#P:多项式层级中的判定问题,可以由拥有精确计数 oracle 的多项式时间机器解决。这是计数能力的结构性结论;它并不表示普通计算机已经拥有这样的高效 oracle。[1]

精确计数怎样给出逐位均匀采样 ​

先查询 Cx(λ)。若为零,返回表示空集的符号 ⊥;否则从 u=λ 开始,每一步按

Pr[b∣u]=Cx(ub)Cx(u),b∈{0,1},

选择下一位并令 u←ub。计数为零的孩子不会被选中,所以沿途分母始终为正。对任意完整见证 y=y1⋯ym∈Wx,路径概率望远镜相消:

Pr[Y=y]=∏i=1mCx(y1⋯yi)Cx(y1⋯yi−1)=Cx(y)Cx(λ)=1|Wx|.

这同时证明输出总是见证且在所有见证间均匀。查询数至多 2m+1,计数的二进制长度至多 m+1;指数多的见证没有被显式列出来。m=0 时只需验证唯一候选空串。

三个见证的全部前缀 ​

取

F=(¬x∧¬y∧z)∨(¬x∧y∧¬z)∨(x∧y∧z),

变量次序为 x,y,z,满足赋值为 001,010,111。全部前缀计数为:

前缀长度 按字典序列出的前缀 对应延伸计数
0 λ 3
1 0,1 2,1
2 00,01,10,11 1,1,0,1
3 000,001,010,011,100,101,110,111 0,1,1,0,0,0,0,1

两条左支路径的概率分别为 23⋅12⋅1=13;右支到 111 的概率为 13⋅1⋅1=13。如果每次只在“有解”的两个孩子间等概率选取,根处会给右边唯一见证概率 1/2,左边两个各 1/4,并不均匀。存在性查询不足以决定正确的分支比例。

公平随机位的运行时间也要计算 ​

给定整数 0≤A≤D、D≥1,实现概率 A/D 的分支:若 D=1 直接决定;否则取 L=⌈log2⁡D⌉ 个公平随机位,得到 r∈{0,…,2L−1}。若 r≥D 则重抽,否则按 r<A 决定是否选第一支。接受后的 r 在 [0,D) 上均匀,每次接受概率大于 1/2,所以期望尝试数小于2。

因此,若精确延伸计数可在多项式时间完成,前面的逐位算法具有期望多项式运行时间,但重抽次数没有确定上界。这个区别不能抹去:有固定随机位数上限、总会返回见证的算法,其各输出概率都是二进有理数,无法把三个见证都赋概率 1/3。[3, §2]

若要求有限最坏运行时间并允许失败,还可先只抽一个均匀序号 r∈[0,Cx(λ)),把拒绝尝试限制为 K 次,耗尽则返回 ⊥。成功后按字典序反排名:在前缀 u 处计算 c0=Cx(u0),若 r<c0 则走0;否则走1并把 r 减去 c0。不变量是 r 为当前子树中的序号,最终与见证一一对应。由于唯一一次截断对各被接受序号完全对称,条件于成功时仍精确均匀,失败概率至多 2−K。若把逐位抽样分别截断,各路径的存活概率可能不同,就不能直接作同样的条件均匀断言。

近似计数到近均匀:三个误差来源各留一份预算 ​

现在只假设前缀计数有FPRAS式的估计器。对每个固定查询前缀 v,它在确定的多项式时间内返回非负、具有多项式位长的有理数,满足

Pr[(1−ε)Cx(v)≤C^x(v)≤(1+ε)Cx(v)]≥1−δ.

运行时间关于完整查询编码长度(含精度参数)、1/ε、log⁡(1/δ) 为多项式,每次调用使用独立于既往记录的新随机位。零计数也包含在保证内:成功的相对近似必须准确返回零。

对非空 Wx、m≥1 和有理目标精度 0<η<1,记所给分子、分母的二进制编码总长度为 Lη,设

ε=η3m,δ=η6m,K=⌈log2⁡3mη⌉.

每位分别查询 a^=C^x(u0) 与 b^=C^x(u1);若两者之和为零则返回 ⊥,否则以 q=a^/(a^+b^) 的概率选0。两个有理数通分后,q=A/D 的整数分子分母仍只有多项式位数,可以精确运算;按上一节抽样,每次分支至多尝试 K 轮,耗尽则返回 ⊥。最后再验证完整输出满足 R(x,y)=1,否则也返回 ⊥。

这个有界时间算法的输出分布 P 定义在 Wx∪{⊥} 上。令 UWx 为见证均匀分布,并给 ⊥ 质量零,则

‖P−UWx‖TV≤η.

特别地,失败概率至多 η。这是总变差距离的保证,并不把失败输出删掉后才衡量误差。

自适应查询的耦合证明 ​

不能把实际算法条件化在“所有计数都估准”上,再假定抽样分布未变;这个事件可能随选中的前缀而变化。改用三个过程比较。

先定义一个仅用于证明的修正过程:某次估计若落在真计数的相对误差区间外,就用真计数替换它;分支抽样暂不截断。实际算法不知道真计数,无法执行这一修正。修正过程的每个计数都在正确区间内,正前缀也只会走向正前缀。

固定其中一步的真计数 a,b,记 p=a/(a+b)。若二者均正,写 a^=a(1+e0)、b^=b(1+e1),其中 |ei|≤ε<1/2,则

|q−p|=p(1−p)|e0−e1|1+pe0+(1−p)e1≤ε2(1−ε)≤ε.

若一个孩子计数为零,修正后的估计也为零,故 q=p。这个界对每一对实际取得的正确估计都成立,平均后仍成立。用共同均匀随机数耦合两枚Bernoulli分支,使它们在当前前缀相同时以至多 ε 的概率走向不同孩子。直到首次分离为止逐步耦合,m 步给出修正过程与精确均匀过程的总变差至多 mε。

其次,把真实的未截断过程与修正过程使用相同随机位运行,直到第一次需修正的计数答案。前缀虽然自适应选择,但给定每次调用前的全部记录,查询已经固定、新随机位尚未使用,故这次估计失败的条件概率仍至多 δ。对至多 2m 次查询使用并集界,给出两过程不同的概率至多 2mδ,不需要这些失败事件彼此独立。

最后比较真实过程的截断与未截断版本。给定任何一轮的正整数分母,每次尝试都以至少 1/2 的概率成功,所以一次分支耗尽 K 轮的条件概率至多 2−K。至多 m 次分支使截断的代价至多 m2−K。最终验证是对输出施加同一确定性映射,不会增大总变差。三角不等式合并为

‖P−UWx‖TV≤mε+2mδ+m2−K≤η3+η3+η3=η.

例如前面的三个见证、η=0.1,可取 ε=1/90、δ=1/180、K=7;三项界依次为 1/30,1/30,3/128,总和 173/1920≈0.090104<0.1。这些是保守的全局界,不声称本小例实际误差恰好等于它们。

得到了什么,没有默认得到什么 ​

查询数为 2m,各次精度取 Θ(η/m),所以这个直接构造的运行时间是 poly(|x|,Lη,1/η),包括读取任意给定精度编码的成本。Jerrum–Valiant–Vazirani在自约化条件下证明了更强的计数/生成等价,其生成器对精度的依赖为 poly(|x|,log⁡(1/η)),并使用不同的逐点概率与失败约定;本页的简单分支算法没有证明那个更强结论。[3, §6]

DNF对前缀赋值后的限制仍可表示为多项式大小的显式DNF,并保留剩余变量全集,故其已有FPRAS可接入此处,得到相应的近均匀满足赋值采样。一般CNF的前缀自约化同样容易,但本页没有给出它的FPRAS。结构上的自约化、可调用的计数器和误差保证是三个分别需要落实的条件。

Toda 定理的完整归约链进一步给出仿射隔离、固定量词层的误差预算,以及三次多项式的模提升。它用两个精确 #P 值恢复接受随机种子的整数数量,说明近似计数和普通存在性查询为何不能直接替代这个接口。

算术电路与 VP/VNP使用 permanent 的同一表达式研究另一种模型:固定域上的非一致多项式族。该页展开布尔矩阵见证的加权求和与保值投影,并区分域特征、整数计数以及两种归约接口。

参考资料

[1] Sanjeev Arora、Boaz Barak,Computational Complexity: A Modern Approach,作者公开草稿第 9 章:#P 的见证定义、归约、permanent、PP 与 Toda 定理。公开文件为 2007 年草稿,章节编号按该文件。

[2] Leslie G. Valiant,The Complexity of Computing the Permanent,Theoretical Computer Science 8(2),1979,189–201:permanent 计数困难性的原始论文。

[3] Mark R. Jerrum, Leslie G. Valiant, Vijay V. Vazirani, “Random Generation of Combinatorial Structures from a Uniform Distribution”, Theoretical Computer Science43, 1986, pp.169–188:§2、p.172,公平位与允许失败;Theorem3.3、pp.174–177,延伸计数与生成;§6、pp.180–181,自约化;Lemmas6.1–6.2及Theorems6.3–6.4、pp.182–187,随机近似计数与生成。本文自行展开逐位算法的总变差三项预算,不把它标作原文更强生成器的完整证明。

关系图谱11 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系