时间复杂度
时间复杂度反映的是一个算法随着输入数据规模的扩大,解决时间的增长。比如 \(a + b\) 问题是 \(\mathcal{O(1)}\) 的。选择排序是 \(\mathcal{O(n^2)}\) 的。输出长度为 \(n\) 的全排列是 \(\mathcal{O(n!)}\) 的。
我们称多项式复杂度为 \(\mathcal{O(n^d)},\mathcal{O(n\log n)},\mathcal{O}(1)\) 这样的。
非多项式复杂度长 \(\mathcal{O(a^n)},\mathcal{O(n!)}\) 这样的。
P 问题
指的是一类有多项式时间复杂度解法的问题。
一般 OI 题都是 P 问题。
但是判断是否存在哈密顿回路就不是 P 问题
NP 问题
注意并不是 “not P” 问题。 而是指能 在多项式复杂度时间内 验证解的问题。
上文判断存在哈密顿回路就是 NP 问题。因为我可以在 \(\mathcal{O(n)}\) 时间判断一个路径是否包含了恰好一次每个点。
显然 \(P \sub NP\)。而人们不知道 \(NP\) 是否等于 \(P\)。
NPC 问题
NP 完全问题。
规约
问题 \(B\) 的解法可以涵盖 \(A\) 的解法, 称 \(A\) 可以约化为 \(B\)。
比如 解一元一次方程 可以约化为 解一元二次方程。令二次项系数为 \(0\)。
比如 哈密顿路径 可以约化为 TSP 问题。两点有边就设边权为 \(0\),否则为 \(1\)。 TSP 求解路径最小值。
这里蕴含了 \(A\) 比 \(B\) 简单的道理。这个过程也许会使得时间复杂度变高。
我们规定约化的过程必须满足从一个输入到另一个输入的变换复杂度为多项式复杂度,否则这个规则毫无意义。
定义
- 属于 NP 问题。
- 可以规约到一个 NPC 问题。
根据传递性,存在一个超级 NPC 问题。所有问题可以规约至他。
有个显然的传递性。
哈密顿路径就是 NPC 问题。
\(n\) 个数集合判断是否可以选出和为 \(m\) 的问题 也是 NPC 问题。
NPC 问题如果可以找到多项式时间复杂度的解法,我们就可以证明 P = NP。
标签:多项式,复杂度,NPC,问题,NP,mathcal From: https://www.cnblogs.com/Lates/p/16705700.html