1. 概述

布尔可满足性问题(SAT)是第一个被证明是 NP-Complete 的问题。本文中我们将深入探讨 SAT 问题,并介绍 Cook-Levin 定理

我们还将讨论 3-SAT 问题,并展示如何通过将其归约到 SAT 问题来证明它也是 NP-Complete。

2. SAT 问题简介

SAT 的核心问题是:给定一个布尔表达式,是否存在一组变量的真假赋值,使得该表达式为真?

举个例子:

a b c (a ∧ b) ∨ c (a ∧ ¬a) ∨ (c ∧ ¬c)
1 1 1 1 0
1 1 0 1 0
1 0 0 0 0
0 0 1 1 0
0 0 0 0 0

第一种表达式 (a ∧ b) ∨ c 有 5 种赋值使其为真,因此是可满足的;

第二种表达式 (a ∧ ¬a) ∨ (c ∧ ¬c) 对于所有赋值都为假,因此是不可满足的。

使用真值表法验证所有可能的变量组合,时间复杂度为 O(2ⁿ),当变量数量较多时效率非常低。

3. 合取范式(CNF)

在讨论 SAT 问题时,合取范式(CNF) 是一个核心概念。

一个布尔表达式如果可以表示为多个子句的合取(AND),每个子句又是一个或多个文字(变量或其否定)的析取(OR),则称其为 CNF。

例如:

(a ∨ ¬b) ∧ (¬a ∨ b ∨ c)

其中每个子句如 (a ∨ ¬b) 是析取形式,整体是合取形式。

所有布尔表达式都可以通过 德摩根律双重否定律分配律 转换为 CNF 形式。

4. SAT 的变种

4.1. 2-SAT

每个子句最多包含两个文字的 SAT 问题。它可以在多项式时间内解决

解决方法通常是通过构造有向图并寻找强连通分量(SCC),适用于如图的二分图判定、标签自动布局等场景。

4.2. 加权 2-SAT

给定一个每个子句含两个文字的 CNF,以及一个整数 k,判断是否存在最多 k 个变量为真的赋值使整个表达式满足。

这个问题是 NP-Complete,常用于顶点覆盖问题(Vertex Cover)建模。

4.3. 3-SAT

每个子句最多包含三个文字的 SAT 问题,是 NP-Complete

它是 Karp 的 21 个 NP-Complete 问题之一,常用于归约证明其他问题的复杂度。

4.4. 精确 3-SAT(Exactly One 3-SAT)

要求每个子句中恰好一个文字为真,其余为假。该问题同样是 NP-Complete,常用于归约证明。

5. Cook-Levin 定理

Cook-Levin 定理指出:布尔可满足性问题是 NP-Complete。

换句话说:

✅ SAT ∈ NP
✅ 所有 NP 问题都可以在多项式时间内归约到 SAT

因此 SAT 是 NP-Complete。

5.1. 证明思路

  • 任何 NP 问题都可以由一个非确定型图灵机在多项式时间内解决。
  • 给定一个输入,可以构造一个布尔电路来模拟该图灵机的执行过程。
  • 电路输出为真 ⇔ 存在一个输入使问题为“是”。
  • 电路可以转换为 CNF 形式,等价于 SAT 问题。

逻辑门的 CNF 表达

  • AND 门 (a ∧ b) → x 的 CNF:

    (¬x ∨ a) ∧ (¬x ∨ b) ∧ (¬a ∨ ¬b ∨ x)
    
  • OR 门 (a ∨ b) → x 的 CNF:

    (¬x ∨ a ∨ b) ∧ (¬a ∨ ¬b ∨ x)
    
  • NOT 门 x ↔ ¬a 的 CNF:

    (a ∨ x) ∧ (¬a ∨ ¬x)
    

通过这些转换,可以将任意电路转换为 CNF,从而归约到 SAT。

6. 3-SAT 简介

3-SAT 是 SAT 的一个特例:每个子句最多包含三个文字,判断是否存在满足赋值。

虽然比 SAT 更受限,但目前仍没有多项式时间算法能解决它。

示例

原始 SAT 表达式:

φ = (x1 ∨ x2 ∨ ¬x4 ∨ ¬x5) ∧ (¬x1 ∨ x4 ∨ x5 ∨ ¬x6) ∧ (x6 ∨ x7) ∧ (¬x2 ∨ x3)

满足赋值为:

x1=1, x2=0, x3=0, x4=1, x5=0, x6=0, x7=1

将其转换为 3-SAT 形式:

φ' = (x1 ∨ x2 ∨ y1) ∧ (¬y1 ∨ ¬x4 ∨ ¬x5) ∧ (¬x1 ∨ x4 ∨ y2) ∧ (¬y2 ∨ x5 ∨ ¬x6) ∧ (x6 ∨ x7) ∧ (¬x2 ∨ x3)

引入新变量 y1, y2,使每个子句变为最多三个文字,结果仍可满足。

7. 3-SAT 的 NP-Complete 性质证明

要证明 3-SAT 是 NP-Complete,我们需要:

✅ 3-SAT ∈ NP
✅ 所有 NP 问题可以归约到 3-SAT

我们知道 SAT 是 NP-Complete,而 SAT 可以在多项式时间内归约到 3-SAT。

归约过程

假设一个子句有 m > 3 个文字:

C_r = a1 ∨ a2 ∨ a3 ∨ ... ∨ am

我们引入新变量 y,将其拆分为两个子句:

C'_r = (a1 ∨ a2 ∨ y) ∧ (¬y ∨ a3 ∨ ... ∨ am)

递归应用该过程,直到所有子句都变成最多三个文字。

等价性证明

我们证明 C'_rC_r 是等价可满足的:

  • 如果 C'_r 满足,那么 C_r 也满足
  • 如果 C_r 满足,那么存在 y 的赋值使 C'_r 满足

因此,我们可以在多项式时间内将任意 SAT 归约到 3-SAT。

✅ SAT ∈ NP-Complete
✅ SAT ≤p 3-SAT
➡️ 3-SAT ∈ NP-Complete

8. 小结

  • SAT 是最早被证明为 NP-Complete 的问题。
  • Cook-Levin 定理是其理论基础。
  • 3-SAT 是 SAT 的一个受限版本,也是 NP-Complete。
  • 通过归约方法,我们可以将 SAT 转换为 3-SAT,并保留其可满足性。

这些理论是理解复杂度类 NP 和 NP-Complete 的基石,也为许多实际问题的难度分析提供了依据。


原始标题:SAT and 3-SAT - Cook-Levin Theorem