Skip to content

定义Definition

函数复杂度类 FP

FP · Function polynomial time · 多项式时间函数

明确单值函数的全输入输出契约、写出成本与复合封闭性,并区分FP函数、P语言和FNP关系的选择算法。

形式陈述 ​

本页采用单值全函数口径:f:{0,1}∗→{0,1}∗ 属于 FP,若存在一台确定性机器和一个固定多项式 p,对每个输入 x 都在 p(|x|) 步内停机,并完整输出 f(x)。这是函数的复杂度类;f(x) 是指定的一份字符串,不是“从许多允许答案中任意选一份”的关系。

时间预算按完整输入编码长度计算,也包括写出结果。若每步至多写常数个输出位,便有 |f(x)|≤O(p(|x|))。这不是额外假设,而是机器实际写出答案所迫出的必要条件。数字输出通常采用二进制,矩阵或列表输出必须说明逐项显式表示还是某种压缩描述。

若一个自然函数只对合法实例定义,可以约定非法编码统一返回带标签的 INVALID,从而得到全函数;也可以研究部分函数,但必须另写其定义域、域外停机和输出约定。本页只用前一种方式。用于有效输出的标签与错误标签必须可区分,空串、整数零和错误不可共用一个编码。

直觉

P 的算法最终回答一个真假位;FP 的算法可能返回整数、路径或翻译后的程序。两者都要求统一的确定性多项式最坏时间,但输出任务不同。说“乘两个整数属于 P”省略了接口;更准确地说,二进制乘积函数属于 FP,而“乘积是否等于给定整数”的判定语言属于 P。

函数值唯一,也不意味着容易计算。一个巨大真值表可以唯一规定某个函数,却未必给出高效算法。反过来,一个允许许多结果的任务,只要固定算法的所有择优规则,就会产生某个单值选择函数;要判断它是否属于 FP,还得证明这台算法的运行界。

例子与边界

把二进制加法写成完整函数接口 ​

输入为可解析的整数对 ⟨a,b⟩,每个非负整数用无前导零的二进制表示,零单独写作 0。函数输出带 VALUE 标签的 a+b;格式不合规则返回 INVALID。给 a=10112=11、b=1102=6,将两者在右侧对齐为 1011 与 0110。

从最低位起,四轮“输入位、进位”分别为 (1,0,0)、(1,1,0)、(0,1,1)、(1,0,1)。写出的低到高结果位为 1,0,0,0,末尾再写进位 1,正常读序得到 10001,即 17。逐位实现的总工作由输入位数线性控制,反向输出若需临时保存也只增加线性扫描,所以这个函数属于 FP。空输入不是整数零,而是格式错误。

这里整数数值可以很大,位数却只增长一位。位复杂度已经说明完整幂 2e 的不同情形:输入二进制 e,输出要写 e+1 位,可能远长于输入长度的任何多项式。把输出改成文本“2 的 e 次方”会缩短表示,却也改变了函数的输出契约。

复合为什么仍是多项式 ​

若 f,g∈FP,分别由非减多项式 p,q 控制时间,可先完整求出 y=f(x),再计算 g(y)。因为 |y|≤O(p(|x|)),复合成本至多

O(p(|x|)+q(Cp(|x|))),

其中固定常数 C 吸收输出编码开销,因此 g∘f∈FP。关键是中间结果的长度已被第一次运行的时间控制;若只知道调用了两个子程序,而不知第一个输出多长,就无法得到此结论。

图关系易判定,不等于函数易求值 ​

给定 f∈FP,它的图关系 Gf={⟨x,y⟩:y=f(x)} 在 P 中:先算 f(x),再与 y 比较即可。但反向只知道 Gf 容易验证,仍是在说“给我候选,我可以检查”,并没有指定怎样找到候选。

即使答案唯一且多项式短,也不能靠遍历所有短串宣称 FP:长度 m 有 2m 个候选。假定存在难以求逆的长度保持多项式时间置换 h,则逆函数值 h−1(x) 唯一,其图关系可检查 h(y)=x,却仍按这个假设难以高效求出。这个条件例不证明无条件分离,只定位错误推理缺失的“搜索”步骤。

推论与应用

语言 L 属于 P,当且仅当其特征函数 χL(x)(成员输出 1,非成员输出 0)属于 FP。这是判定接口在函数框架中的嵌入,不能把所有 FP 函数直接当成语言集合。

FNP采用多值关系。说关系 R “可在 FP 中求解”,通常是说存在一个 FP 选择函数,有解时返回合法见证、无解时返回独立标记。文献也常把这些可解关系整体叫 FP;读到“FP=FNP”时须按关系可解性的约定理解,不能把本页的单值函数集合与关系集合直接作字面相等。

Cook–Reckhow 证明系统使用 FP 函数把证明串映成永真式,其时间预算按证明输入的长度计算,不按公式长度计算。优化值与见证恢复则把输出职责拆成最优整数和达到该值的对象;只有两个职责都完成,才算解决指定的优化输出函数或搜索任务。

参考资料
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

使用的工具