Day 36 · 2026.07.28

计算复杂性

Computational Complexity — 把「难」变成可证明的数学对象
"If P = NP, there would be no special value in creative leaps, no fundamental gap between solving a problem and recognizing the solution once it's found." — Scott Aaronson

P 与 NP

P vs NP · 求解与验证之间的鸿沟
Complexity
直觉版

填数独很难,检查填好的数独却容易——扫一遍行、列、宫就够。证明一个定理可能耗掉十年,读懂它也许只要一个下午。「找到」与「认出」之间的这道不对称,是智力经验里最普遍的事实之一。

复杂性理论把它写成两个集合:P 是能在多项式时间内解出的问题,NP 是给了答案后能验证的问题。P vs NP 只问:两者真的不同吗?(顺带澄清:NP 的 N 是「非确定性」,不是「非多项式」。)

求解:搜索 2ⁿ 条路径 指数级的可能答案 验证:只走一条路 证书 w = 1 0 1 1 0 … 验证器 V(x, w) 多项式时间
正式定义
$$L \in \mathrm{NP} \iff \big(\, x \in L \iff \exists\, w,\ |w| \le p(|x|),\ V(x,w)=1 \,\big)$$

$x$ 是输入,$w$ 是证书(那份「答案」),$V$ 是多项式时间的验证器,$p$ 把证书长度按输入规模封顶,以免「答案本身长得没边」把指数藏进去。$\exists$ 是「猜」,$V$ 是「验」:NP 就是猜一次加验一次;P 是 $w$ 为空的特例。

为什么美

第一层美是定义的稳健:图灵机、RAM、任何合理的真实计算机划出的都是同一条线,因为多项式对复合封闭。稳健往往意味着抓住了真东西。

第二层更奇特:几乎所有人相信 $\mathrm{P} \ne \mathrm{NP}$,五十年却毫无进展,但我们证明了为什么难证——相对化、自然证明、代数化三重障碍各封杀了一整类技术。数学里罕有针对「证明方法本身」的不可能性定理,这里有三个。

应用

公钥密码学的存在以 $\mathrm{P} \ne \mathrm{NP}$ 为必要前提:若二者相等,RSA 与椭圆曲线一齐失效。另一面是工程的现实主义:求神经网络的最优权重是 NP 困难的,SGD 却每天找到够好的解;SAT 求解器最坏情况指数爆炸,却在芯片验证与程序综合里处理百万变量的实例。最坏情况的难与典型情况的易是两件事——现代计算工程正立在这道缝里。

一句话精华 · 思考题
相信 P ≠ NP,就是相信「创造」不能被「检查」自动倒推出来。
你的工作里哪些环节是 NP 形状的——做起来难、查起来易?代码 review、论文评审、招聘,是否都在依赖这道不对称?

归约

Reduction · 难度的搬运工
Method
直觉版

你不会解 A,但你会解 B。若能把 A 的任意实例快速改写成 B 的实例、两边答案一致,那么「会解 B」就自动「会解 A」。这是数学最古老的动作:化归。

复杂性理论的天才之处,是把这支箭反过来读:A 已知很难而能塞进 B,那 B 至少一样难——否则解了 B 就顺手解了 A。同一个箭头,正着读传播「易」,倒着读传播「难」:归约因此是难度的运输工具

任意 NP 问题 图着色 调度 SAT 哈密顿回路 背包 Cook–Levin:全体涌入 Karp:再扩散出去
正式定义
$$A \le_p B \quad\Longleftrightarrow\quad \exists\, f \in \mathrm{FP}: \ \ x \in A \iff f(x) \in B$$

$f$ 是多项式时间可计算的翻译函数。关键在于 $f$ 并不解决 A——它只把 A 的问句改写成 B 的问句,答不答得出留给 B。$\le_p$ 可传递(多项式复合仍是多项式),于是「难度」不再是形容词,而成了问题集合上的一个偏序

为什么美

没有归约,「这个问题难」只是一句抱怨;有了归约,难成为可携带、可比较、可证明的证据。具体的归约常是精巧的小机器:把每个顶点编码成布尔变量,把「两端不同色」编码成子句——图论的语法就此译成逻辑的语法。

更深的美在于它揭示的同构:逻辑公式、图的团、整数划分、Ising 基态、蛋白折叠模型,表面毫不相干,归约却证明它们是同一个问题换了身衣服。

应用

工程上归约常被正着用:把排班、布线、依赖求解翻译成 SAT/SMT,交给调优几十年的求解器——包管理器的版本求解正是如此。密码学的「可证明安全」本身也是一次归约:把攻破协议归约到某个公认的数学难题。PCP 定理更让近似的难度也能搬运。

一句话精华 · 思考题
归约让「难」从一句抱怨变成一份可以转让的证据。
回想你上一次真正解决的难题:你是解决了它,还是把它翻译成了一个别人已经解决的问题?后者算不算「真的解决」?

NP 完全性

NP-Completeness · 天花板上的那一层
Complexity
直觉版

把 NP 里所有问题按难度排队,会不会有一个「最难的」?直觉说不会——它们来自逻辑、图论、数论、调度,各有各的难法。

1971 年 Cook 与 Levin 各自独立证明:存在,而且布尔可满足性(SAT)就是。理由朴素得惊人——验证器本身是一台跑多项式步的计算机,而计算过程可逐比特写成布尔约束:下一步的每一位,由上一步的邻近几位决定。于是「存在证书使验证器接受」被原样译成「这堆公式可满足」。计算被压平成了逻辑。次年 Karp 用一串归约把 21 个经典问题钉在同一层;今天名单已有数千项,它们要么全有多项式算法,要么全没有。

NP P NP 完全(SAT · 团 · 哈密顿回路 …) 中间层:图同构?整数分解? (Ladner:若 P ≠ NP 则必然非空)
正式定义
$$B \in \mathrm{NPC} \quad\Longleftrightarrow\quad B \in \mathrm{NP} \ \ \wedge\ \ \forall A \in \mathrm{NP},\ A \le_p B$$

两个条件从两侧夹住 $B$:前一条说它不比 NP 更难(自己就在 NP 里),后一条说它不比 NP 中任何问题容易(人人都能归约给它),中间只剩天花板。推论:任何一个 NP 完全问题落进 P,整个 NP 就塌进 P。

为什么美

美在出人意料的塌缩:几千个来自互不相干领域的难题,原以为各难各的,结果是同一个;解开任何一个,全部同时点亮。

但故事没有停在整齐的两层。Ladner 定理说:若 $\mathrm{P} \ne \mathrm{NP}$,则必然存在既不在 P 也不 NP 完全的中间问题。吊诡的是我们几乎抓不住具体例子——图同构长期是候选,可 2015 年 Babai 给出拟多项式算法后,它更像在往 P 滑。天花板清晰,中间地带朦胧。

应用

确认 NP 完全性是工程上的转向信号:不再找精确的多项式算法,改走近似、启发式、参数化或求解器。场景很日常——芯片布局布线、寄存器分配(本质是图着色)、序列比对、路径规划。但「NP 完全」从不等于「实际不可解」:CDCL 求解器每天在工业实例上处理千万级子句,因为真实输入远比最坏情况有结构。把定理当成禁令是最常见的误用。

一句话精华 · 思考题
几千个看似无关的难题,其实是同一个难题的不同方言。
若明天有人给出 SAT 的 $n^2$ 算法,最先被颠覆的也许不是密码学而是数学本身——「寻找一份长度不超过 $N$ 的证明」正是 NP 问题。

量子复杂性

BQP · 当计算的边界交给物理定律
Quantum
直觉版

流传最广的说法是「量子计算机同时试遍所有答案」。若真如此,NP 完全问题早该解决了。真正发生的是:每条计算路径带一个复数振幅,通向同一结果的路径先相加,再取模平方才是概率。复数能相消,于是算法的任务不是试遍,而是编排干涉:让错的振幅彼此抵消、对的彼此加强

这划出了量子优势的边界:只有问题带可利用的周期或对称结构,干涉才有东西可编排。Shor 算法把整数分解转成「找一个函数的周期」,再用量子傅里叶变换读出它——加速来自结构,不是并行。面对无结构的纯搜索,Grover 只有平方根加速,且已被证明最优。

PSPACE NP BQP P 整数分解 SAT(据信在 BQP 外)
正式定义
$$\Pr[x] \;=\; |\alpha_x|^2 \;=\; \Big|\sum_{\gamma \,\to\, x} A_\gamma\Big|^2$$

$\gamma$ 是一条计算路径,$A_\gamma$ 是它的复振幅,求和跑遍所有终点为 $x$ 的路径。经典概率论里这里是非负实数相加,只增不减;换成复数后,两条路径可以相消。整个量子计算的威力,就藏在这一个公理改动里。由此定义的 BQP(量子多项式时间、正确率 $\ge 2/3$)已知 $\mathrm{P} \subseteq \mathrm{BQP} \subseteq \mathrm{PSPACE}$,与 NP 的关系至今未知。

为什么美

其一,一个公理级的小改动撬动了整个复杂性类:概率的取值从 $[0,1]$ 换成复数,仅此而已,却带来经典世界没有的「相消」自由度。这种「换个数域,世界就变了」的时刻不多,上一次是用复数解代数方程。

其二,否定的结果同样是定理。BBBV 定理证明:任何量子算法在无结构搜索上都至少需要 $\Omega(\sqrt{N})$ 次查询——量子不能靠蛮力吃掉 NP 完全。这把「什么可被有效计算」变成了物理问题:答案取决于宇宙允许什么样的动力学。

应用

Shor 的现实后果是正在进行的后量子迁移:NIST 已标准化基于格与哈希的方案,因为 RSA 与椭圆曲线依赖的难题恰好都有周期结构。而 Grover 对对称密码只是把 128 位安全打折到 64 位,AES-256 依旧站得住——威胁分级完全由「有没有结构」决定。最可能先落地的是量子化学与材料模拟,这正是费曼的原始动机:用量子模拟量子才不必付指数代价。而量子机器学习宣称的「指数加速」多依赖 QRAM 式的数据加载假设,假设一拿掉便常常消失。

一句话精华 · 思考题
量子的优势不是同时试遍,而是让错误答案自己抵消掉。
若某个新物理理论允许在多项式时间内解 NP 完全问题,你会先怀疑这个理论,还是先怀疑 $\mathrm{P} \ne \mathrm{NP}$?

深入思考

为什么 P vs NP 五十年毫无进展?我们连「难在哪」都知道吗?
知道,而且相当具体。相对化障碍:存在神谕 $A$ 使 $\mathrm{P}^A = \mathrm{NP}^A$,也存在 $B$ 使二者不等——任何「配上神谕仍成立」的论证因此失效,对角线法出局。自然证明障碍:一个电路下界论证若同时「广泛适用」且「可高效判定」,就能反过来攻破伪随机函数,与密码学假设冲突。代数化障碍则封杀了交互式证明带来的那批技术。三堵墙意味着:要的不是更聪明的老办法,而是一种无人见过的新范式。
最坏情况的难度,是不是一个错误的度量?
对密码学确实不够。$\mathrm{P} \ne \mathrm{NP}$ 只保证「存在难实例」,密码却需要「随便抽一个实例都难」——这是平均情况复杂性。Impagliazzo 描绘了五个可能世界:Algorithmica(P=NP)、Heuristica(最坏难、典型易)、Pessiland(随机实例难却造不出单向函数,两头落空)、Minicrypt(有单向函数无公钥)、Cryptomania(公钥密码成立)。我们不知道住在哪一个。深度学习的成功其实带着「Heuristica 味道」:无数 NP 困难的目标,在真实数据分布上被一次次廉价攻克。
大脑受 NP 困难的约束吗?创造力是不是搜索效率问题?
受,但方式不同。大脑不解一般实例,它在演化筛选过的狭窄分布上跑启发式:视觉是病态反问题,靠先验才可解。这与 SAT 求解器同构——不是打败了最坏情况,而是从未真的遇到它。有意思的在下一层:若创造力只是结构化空间里的高效搜索,那么 $\mathrm{P} \ne \mathrm{NP}$ 保证的不是「机器永远比不上人」,而是「人和机器都得依赖结构、直觉与运气」——一条对碳基与硅基一视同仁的界线。
这四个概念背后是同一个思想吗?
是的,这个思想叫「资源」。复杂性理论真正的动作,是把计算从哲学概念改造成一种有代价的物理过程:时间、空间、随机比特、量子相干性,都是可计量、可交易、可证下界的资源。P 与 NP 是时间资源的两种花法;归约是兑换率;NP 完全是兑换网络的汇点;BQP 说明资源清单由物理定律开列。这个视角对做系统的人尤其可迁移:延迟、带宽、内存、一致性同样能互相归约、能证明取舍的下界——CAP 定理与复杂性下界气质相同。