规约与问题类

称问题 \(\mathsf A\)规约到 问题 \(\mathsf B\),如果 \(\mathsf A\) 可以通过 \(\mathsf B\) 被解决。问题 \(\mathsf A\) 可以归约到问题 \(\mathsf B\) 上,问题 \(\mathsf B\) 比问题 \(\mathsf A\) 难,从计算难度上也可以记作 \(\mathsf A\le\mathsf B\)

规约有几种不同的细分形式(设 \(f\) 是任意一个解决问题 \(\mathsf A\) 的算法):

  • 如果存在一个函数可以把问题 \(\mathsf A\) 的输入转化成 \(\mathsf B\) 的输入只调用一次 \(f\) 并且直接输出 \(f\) 的结果,称为 映射规约。记作 \(\mathsf A\le_{\mathsf m}\mathsf B\)
  • 如果我们把 \(f\) 当成一个指令在算法中多次使用并且任意处理它的输入输出,称为 图灵归约。记作 \(\mathsf A\le_{\mathsf T}\mathsf B\)。下文中的规约一般指代图灵规约。

NP 问题是一类判定问题。一个问题 \(\mathsf L\) 是 NP 的,当且仅当存在一个多项式时间的图灵机 \(\mathsf M\) 和一个多项式 \(\mathsf{Poly}\) 使得对于任意一个输入的字符串 \(\mathsf x\)

\[\mathsf x\in\mathsf L\Leftrightarrow\exists\mathsf u,|\mathsf u|\le\mathsf{Poly}(|\mathsf x|)\text{ s.t. }\mathsf M(\mathsf x,\mathsf u)=1 \]

记作 \(\mathsf L\in \mathsf{NP}\)。一个更直观的理解是:对于 NP 问题,存在一个多项式时间的验证算法,使得问题的一个输入有解当且仅当存在一个多项式长度的表示方案的串能被验证。

一个问题 \(\mathsf A\) 是 NP-Complete 的,当且仅当 \(\mathsf A\in\mathsf{NP}\) 且所有 \(\mathsf{NP}\) 问题 \(\mathsf B\) 可以归约到 \(\mathsf A\)


3-SAT 问题:给定一个由变量 \(x_1,\dots,x_n\) 和与或非、括号组成的逻辑表达式,问是否存在一种给每个变量赋值 \(0\) / \(1\) 的方式使得整个式子的值为 \(1\)。表达式形式形如 \((X∨X∨X)∧(X∨X∨X)∧(X∨X∨X)\),其中每个 \(X\) 都是一个变量或者一个变量取非的结果。一个括号内的表达式称为一个子句。

k-SAT 可以规约到 3-SAT,3-SAT 是大部分 NPC 问题归约的起点。

Cook-Levin 定理:3-SAT 是 NPC 问题。【证明:待填】


说一个最优化问题是 NP,NPC 的,一般指的是它二分之后的版本,也就是输入一个 \(k\) 问答案是否可以大于等于 \(k\)

NP 等问题类度量输入规模看的是输入长度,也就是 允许高精度 的重量和权值。背包系问题 / 数论问题大都有限制重量和权值范围的 伪多项式算法

posted @ 2024-04-12 20:57  Network_Error  阅读(54)  评论(0)    收藏  举报