计算复杂性理论 可视化实验室

用交互式 SVG 呈现 P vs NP、归约、时空复杂度、对角线化、Cook-Levin 与随机化复杂性类。八个模块,纯原生实现,可直接在浏览器中探索计算理论的核心结构。

zero-deps HTML / CSS / JS + SVG requestAnimationFrame prefers-reduced-motion
MODULE 01

P vs NP vs NP-Complete

复杂性类别之间的包含关系。P ⊆ NP,NP-Complete = NP ∩ NP-Hard。点击右侧问题可在关系图中定位其所属类别。

class-relations.svg
P NP NP-Complete NP-Hard (不在 NP)

当前选中

从右侧选择一个问题,或点击图中区域查看其复杂性归属与说明。

P 类
?
NP 非完全
?
NP-Complete
?
NP-Hard
?
MODULE 02

NP 完全归约链

3SAT → Clique → VertexCover → Hamiltonian。每个 NP-Complete 问题都可归约到下一个,证明难度层层传递。播放动画观察实例的逐步变换。

reduction-chain.svg

归约步骤说明

点击“播放”开始归约链动画,或用“单步”逐步观察从 3SAT 公式到哈密顿回路的变换过程。

当前阶段
3SAT
归约步骤
0 / 4
归约方向
多项式
MODULE 03

时间复杂度增长对比

从 O(1) 到 O(n!) 的增长曲线。拖动滑块改变 n,观察不同复杂度函数的相对规模。当 n 超过某阈值,指数与阶乘函数将爆炸式增长。

time-complexity.svg

函数规模(n = 12)

常数与对数函数几乎水平;线性与 n log n 温和增长;多项式平稳上升;而 2ⁿ 与 n! 在 n 略大时即超出可计算范围。

MODULE 04

空间复杂度与内存使用

不同复杂性类的内存占用可视化。L ⊆ NL ⊆ PSPACE ⊆ EXPSPACE。调整输入规模,观察各层级空间需求的增长差异。

space-complexity.svg
L (logspace) NL PSPACE EXPSPACE

空间层次定理

对任意可构造函数 f,SPACE(f) ⊊ SPACE(f log f)。因此严格包含关系成立,更高空间允许判定更多语言。

MODULE 05

近似算法与近似比

TSP 最近邻近似与最优解对比,以及 Voronoi 邻近结构。PTAS / FPTAS 提供可控近似比。重新生成点集观察近似质量。

approximation.svg
近似路线 (NN) 最优路线 Voronoi

近似比 = 近似长度 / 最优长度

最近邻启发式简单快速,但最坏近似比可达 O(log n) 级别;而带三角不等式的度量 TSP 存在 1.5 近似(Christofides)。PTAS 允许任意固定 ε,FPTAS 时间关于 1/ε 为多项式。

近似长度
—
最优长度
—
近似比
—
城市数
—
MODULE 06

对角线化与停机问题

图灵对角线证明:构造机器 D,使其在第 i 个输入上的行为与第 i 台机器相反,导致 D 无法出现在枚举中,从而停机问题不可判定。自指悖论。

diagonalization.svg

对角线论证

假设存在能判定停机问题的图灵机 H。构造 D(x):模拟 H(x,x),若 H 说“停机”则 D 死循环,反之停机。问 D(D) 是否停机即导出矛盾——因此 H 不存在。

机器数
8
对角线状态
—
悖论
D(D) 矛盾
MODULE 07

Cook-Levin 定理

3SAT 是 NP 完全的。证明分两步:① SAT ∈ NP(赋值证书可多项式验证);② 任意 NP 问题可多项式归约到 SAT——将非确定图灵机的计算表编码为合取范式。

cook-levin.svg

证明骨架

计算表是一张 T×T 的格子,每个单元格 cell[i,j] 表示时刻 i 在位置 j 的带符号/状态。用一组子句约束:合法初始格局、合法转移、接受格局可达。所有约束合取即为 SAT 实例。

表规模
6×6
变量数
—
子句族
4
归约类型
多项式
MODULE 08

随机化复杂性类

BPP / RP / ZPP 与概率图灵机。RP 允许单侧错误,BPP 允许双侧错误,ZPP 零错误期望多项式时间。关系:ZPP = RP ∩ co-RP ⊆ BPP。

randomized.svg
接受 拒绝 错误路径 随机硬币

概率图灵机模拟

点击“投币”模拟一次运行。RP 中 x∈L 时大部分随机串接受;x∉L 时绝不接受(单侧错误)。BPP 接受概率 >1/2,ZPP 期望时间多项式且零错误。多次重复可指数级降低错误率。

接受次数
0
拒绝次数
0
接受频率
—
当前类
RP