形式陈述
判定任务只输出“是”或“否”;搜索任务还必须交出一份对象。固定二进制串集合,关系 R ⊆ { 0 , 1 } ∗ × { 0 , 1 } ∗ 表示“y 是输入 x 的合法见证”。记 R ( x ) = { y : R ( x , y ) } ,以及存在见证的输入语言
D R = { x : ∃ y R ( x , y ) } . 关系多项式平衡 ,是指存在一个固定、可计算的非负整数多项式上界 p ,使 R ( x , y ) 蕴涵 | y | ≤ p ( | x | ) 。再要求关系本身可由确定性算法在 | x | + | y | 的多项式时间内判定。满足这两个条件的搜索关系组成 FNP ;这里采用关系口径,允许同一个输入拥有许多正确答案。NP 的验证器定义 理路 复杂度类 NP NP · Nondeterministic polynomial time 由正实例拥有多项式长度、可在多项式时间内验证的证书所刻画的语言类。 立即给出 D R ∈ NP 。
本页的求解接口是:有见证时输出任意 y ∈ R ( x ) ,没有见证时输出专用标记 ⊥ ,并对所有输入停机。⊥ 不是空串 ε ,因为空串可能是正确见证。FNP 的定义只保证候选验证快;它没有保证这个求解接口可在多项式时间完成,也没有给 ⊥ 配备一份容易检查的“无解证书”。若文献只要求算法在有解输入上成功,需要先核对它是否也规定了无解行为。
由一个固定关系构造前缀语言
E R = { ⟨ x , s ⟩ : ∃ z , | s z | ≤ p ( | x | ) ∧ R ( x , s z ) } . 元组采用带长度信息的可解析编码。给出后缀 z 后,可以检查总长度并验证 R ( x , s z ) ,所以 E R ∈ NP 。这是一个同时接受实例与前缀的新判定接口;它一般不是只接受原实例的 D R 。
直觉
关系像验收单:同一张地图可以有多条合法路径,验收单不必预先指定其中哪条。多项式平衡负责保证答案“写得下”,多项式验证负责保证答案“查得快”。两者缺一不可,而“找得快”是第三件事。
前缀询问把一大群候选分成两组。例如当前前缀是 01,询问 010 是否仍有合法补全。回答“是”时可以放心走向这一组;回答“否”时,只有在已经知道 01 确实能补全、且 01 本身还不是答案的前提下,才能转向 011。
例子与边界
变长见证:停止动作不能省略
假设已有准确判定 E R 的 oracle,即一个暂时把内部求解成本单列的黑箱。令 N = | x | ,先询问 E R ( x , ε ) ;回答否就返回 ⊥ 。否则置 s = ε ,反复执行:
用关系验证器检查 R ( x , s ) 。若真,立即返回 s
若假,询问 E R ( x , s 0 ) 。若真,把 s 改成 s 0 ;若假,把 s 改成 s 1
不变量是“当前 s 是某个合法见证的前缀”。初次询问建立它。若 s 不是见证,但有某个见证以 s 开头,那么该见证还有下一位,必为 0 或 1;因此排除 0 后可选 1。每轮长度增加一,最多增长到 p ( N ) ;此时不变量只能由 s 本身是见证来满足,故下一次验证必然停止。总共至多 p ( N ) + 1 次 oracle 询问、p ( N ) + 1 次关系验证,每条查询长度为 O ( N + p ( N ) + 1 ) ,写入与验证开销均为多项式。
以一个可手查的小关系为例,对固定输入允许的见证恰为 { ε , 10 , 111 } 。算法在初次存在性询问后直接返回 ε 。如果删除空串,只允许 { 10 , 111 } ,询问前缀 0 得否,转到 1;验证 1 失败,询问 10 得是,下一轮验证 10 成功并返回。若只知道长度上界为 3,却强行补成三位,100 不在关系里;“所有短证书都能随便补零”不是定义。
另一种正规化会显式编码原长度。取 d = ⌈ log 2 ( p ( N ) + 1 ) ⌉ ,用 d 位长度字段加恰好 p ( N ) 位数据区,长度不足的尾部必须补零;p ( N ) = 0 时长度字段为空。验证器先读长度字段,检查解码整数 0 ≤ ℓ ≤ p ( N ) ,再检查尾部补位并对真正见证运行原验证器;超界长度编码必须拒绝。这样才可合法改成固定长度搜索。上面的直接停止算法不需要做这个转换。
为什么换成 NP 完全 oracle 就够用
固定任意 NP 完全语言 理路 NP 完全性 NP-completeness 同时属于 NP 且为 NP-hard 的性质。 B 。由于 E R ∈ NP ,存在 Karp 归约 理路 多项式时间归约 Polynomial-time reduction · Karp reduction 用一个多项式时间可计算的变换把问题 A 的实例转换为问题 B 的实例。 h ,使 ⟨ x , s ⟩ ∈ E R 当且仅当 h ( ⟨ x , s ⟩ ) ∈ B 。每次前缀询问先计算 h ,再调用 B 的判定器,便能执行上述恢复。归约输出长度受其多项式时间约束,因此多项式条查询没有藏入指数长实例。
整套搜索程序是多次自适应 oracle 调用:后一个前缀取决于前一个回答。单次 h 是 Karp 归约,整个恢复过程不是“一次 Karp 映射”。若 D R 本身 NP 完全,可选 B = D R ,从而用原问题的判定器恢复;若只知道 D R ∈ NP ,没有这一步结论。
原问题永远有解,判定器也可能毫无指引
考虑一个假定难以求逆的、长度保持的多项式时间置换 f ,关系 R f ( x , y ) 当且仅当 f ( y ) = x 。置换保证每个 x 恰有一个原像,因此 D R f 是全部二进制串,判定器永远回答“是”。它没有回答“原像首位能否为 0”。若这类置换存在,验证快且总有解,仍不等于能快速找到解。这是条件性边界例,绝不是已证明某个具体置换求逆不在多项式时间。
仅要求验证快也不够定义 FNP。关系“x 编码整数 k ,y 恰是 2 k 个零”可在输入加候选的总长度的多项式时间检查,但见证长度不受 | x | 的多项式控制。检查一份巨长答案很快,不会使这份答案变短。
推论与应用
若 P=NP,则上述前缀语言都有多项式判定器,全部 FNP 关系都可在多项式时间求解。反过来,若全部 FNP 关系都有满足本页停机和 ⊥ 契约的多项式求解器,给任意 NP 验证关系运行求解器,再检查返回见证,即可多项式判定该语言。这是常说的“P=NP 等价于所有可高效验证的短见证都可高效找到”的精确口径。
SAT 自归约 理路 SAT 的逐变量见证恢复 SAT self-reduction · SAT search-to-decision · SAT 自归约 只调用返回是或否的SAT判定器,用逐变量限制恢复总赋值,并分开计算查询次数、查询位长、外层成本与无解终止。 提供更直接的实例:不必绕通用计算编码,而是删去已经满足的子句、删去已经为假的文字,把前缀约束继续交给 SAT 判定器。FP 函数接口 理路 函数复杂度类 FP FP · Function polynomial time · 多项式时间函数 明确单值函数的全输入输出契约、写出成本与复合封闭性,并区分FP函数、P语言和FNP关系的选择算法。 进一步区分“允许任意一个答案”的关系与“必须输出指定答案”的单值函数。共同终点 要求实际写出这两种接口的查询与停止行为。
参考资料
Boaz Barak,Introduction to Theoretical Computer Science , Chapter 16 ,§16.1,Theorem 16.1 与 Algorithm 16.2:前缀语言的搜索—判定论证。本页另展开变长见证的停止条件、独立无解标记和查询编码账本
Christos H. Papadimitriou,“On the Complexity of the Parity Argument and Other Inefficient Proofs of Existence”,Journal of Computer and System Sciences 48(3),1994,pp. 498–532,原文 :多项式平衡搜索关系的原始框架
Constantinos Daskalakis、Gabriele Farina,MIT 6.7980,Total search and TFNP ,§L18.1–L18.2,在线讲义,访问于 2026-10-08:关系口径与搜索归约接口