SAT

形式:AND of OR clauses, Conjunctive Normal Form. 一个 SAT 是多个 clause 取 AND 的结果,每一个 clause 是多个变量取 OR 的结果。

(x1¬x2)(¬x1x3x4)(x2¬x3) (x_1\lor \lnot x_2)\land (\lnot x_1\lor x_3\lor x_4)\land (x_2\lor \lnot x_3​)

from SAT to 3SAT

3SAT: 在 SAT 的基础上,满足每一个 clause 只包含三个变量。

Clique 团

Clique Problem 是指: 给定一张图 $G=(V,E)$ 和一个整数 $k$,检查是否存在 $|V'|=k$ 的 clique.
证明

首先,clique problem 是 NP 问题。这个比较好证明。
其次,我们尝试把 3SAT 归约到 Clique. 对于每一个 clause ci=x1x2x3c_i=x_1\lor x_2\lor x_3,建立三个节点 ni,1,ni,2,ni,3n_{i,1},n_{i,2},n_{i,3}.

对于图中不属于同一个 clause 的两个节点 xi,xjx_i, x_j,只要 xi¬xjx_i\ne \lnot x_j,就建立一条边。

我们令 k=mk=m,检查图里是否存在大小为 kk 的 clique.


Subset Sum

给定 nn 个元素 {a1,a2,an}\{ a_1,a_2,\dots a_n \} 和一个数 TT,是否存在能从这 nn 个元素里找到一个子集,使得其和为 TT

证明

我们证明 3SATpSubset Sum\text{3SAT} \propto_p \text{Subset Sum}

考虑 3SAT 有 nn 个变量和 mm 个 clause,对于每一个 3SAT 变量 xix_i,在 subset sum 里创建两个变量 ti,fit_i,f_i

我们令 set 里的变量均有 n+mn+m 位,前 nn 位记为变量部分,后 mm 位记为子句部分。

  • tit_i 变量部分第 ii 位设置为 11,子句部分若 clausej\text{clause}_j 包含 xix_i 则子句部分的第 jj 位设置为 11
  • fif_i 变量部分第 ii 位设置为 11,子句部分若 clausej\text{clause}_j 包含 ¬xi\lnot x_i 则子句部分的第 jj 位设置为 11

同时,对每一个子句 clausei\text{clause}_i,创建变量 cic_i,其变量部分为全 00,子句部分仅第 ii 位为 11.

考虑如何构造 TT,令 TT 的变量部分的每一位都是 11,子句部分的每一位都是 33.

3SAT     \implies Subset Sum

如果 3SAT 存在一种合法的方案 SS,对于 xiSx_i\in S,如果 xi=truex_i=\texttt{true},则往 subset 里添加 tit_i,否则添加 fif_i.

又因为对每一个子句而言,至少有一个 xix_i 或者 ¬xi\lnot x_i 为真,因此最多选两个 cjc_j 一定可以让 TT 子句部分的第 jj 位为 33.

3SAT     \impliedby Subset Sum

考虑某个子集的元素:

  • 如果包含 tit_i,则令 xi=truex_i=\texttt{true}
  • 如果包含 fif_i,则令 xi=falsex_i=\texttt{false}

因此对于每一个 clausej\text{clause}_j 而言,因为 cjc_j 最多被选 22 次,而 TT 对应位置为 33,所有至少有一个 xiclausej=truex_i\in \text{clause}_j=\texttt{true},即 clause 为真,从而 3SAT 满足。

Equal Sum Partition

给定数集 {a1,a2,,an}\{a_1,a_2,\dots,a_n\},能否选出子集,使得子集的和恰好为总和的一半?

证明

我们证明 Subset SumpEqual Sum Partition\text{Subset Sum}\propto_p \text{Equal Sum Partition}

s=ais=\sum a_i

  • 如果 t=s2t=\frac s2,那么问题不变
  • 如果 t>s2t\gt \frac s2,那么添加一个数 an+1=2tsa_{n+1}=2t-s
  • 否则 t<s2t\lt \frac s2,那么添加一个数 an+1=s2ta_{n+1}=s-2t

General Knapsack 背包问题

存在 nn 个物品,每一个都有重量 wiw_i 和价值 viv_i。给出重量限制 WW 和价值目标 VV,能否选出一些物品 SS,使得 iSwiW\sum_{i\in S} w_i\le W 并且 iSviV\sum_{i\in S} v_i\ge V.

证明

思路:我们证明 Subset SumpKnapsack\text{Subset Sum}\propto_p \text{Knapsack}

【归约】令物品 wi=vi=aiw_i=v_i=a_i,且 W=V=TW=V=T.


Hamiltonian Path 哈密顿路径

有向图下的哈密顿路径

证明

我们证明 3SATpH-Cycle\text{3SAT}\propto_p \text{H-Cycle}

【归约】
令 3SAT 有 nn 个变量和 mm 个子句。对于一个变量 xix_i

  1. 让其对应一行节点 rowirow_i,包含 3m+33m+3 个节点,这一行的相邻节点之间连双向边
  2. 在这一行节点中,从第二个节点开始,每三个节点代表一个 clause cjc_j,颜色顺序为黄、绿、绿
  3. 额外有一个黄色节点,分别指向这一行的开头结尾两个节点
    1. 规定 xi=truex_i=\texttt{true} 则往左走,否则往右走
  4. 一行的开头结尾两个节点又分别指向 xi+1x_{i+1} 的额外黄色节点
对应 $x_i$
对应 $x_i$

对于每一个子句 cjc_j,找到其所包含的三个变量的行 rowirow_i 中,对应 cjc_j 的两个绿色节点 rowi,1,rowi,2row_{i,1},row_{i,2},分别连不同方向的有向边。

  • 如果是 xix_i,则连边方向为:靠左的绿色节点
对应 $c_j$
对应 $c_j$
3SAT     \implies H-Path

如果一个合法的 3SAT 方案存在


最长路径

旅行商问题