📜  SAT是NP完整的证明(1)

📅  最后修改于: 2023-12-03 15:05:02.032000             🧑  作者: Mango

SAT是NP完整的证明

NP完整性是计算机科学中的一个重要概念,它是指一类问题具有一种性质,即如果一个问题可以在多项式时间内被求解,那么所有NP问题都可以在多项式时间内约化到该问题。

SAT问题是一类典型的NP问题,它的问题描述为:给定一个布尔表达式,其中包含多个变量和逻辑运算符,是否存在一组布尔变量赋值,能够使该布尔表达式计算结果为真?

SAT问题的NP完整性被证明了已久,下面是简单的证明过程。

首先证明SAT问题是一个NP问题

假设给定一个SAT问题和一个解,我们可以在多项式时间内验证该解是否正确。具体的,我们可以将该解代入原始布尔表达式中并计算得出结果,如果结果为真,则解正确。因此,SAT问题属于NP问题。

然后证明SAT问题可以约化到NP完备问题3-SAT

3-SAT问题是指对于一个包含若干布尔变量和与、或、非等逻辑运算符的布尔表达式,每个子句最多包含3个变量。该问题是NP完备的。

下面我们将SAT问题约化为3-SAT问题。

假设给定一个SAT问题,我们可以将其转化为一个3-SAT问题。具体的,我们可以根据以下规则分解原始布尔表达式中的每个子句:

  • 如果子句中包含不超过3个变量,则不做处理。
  • 如果子句中包含超过3个变量,则将该子句分解为若干个包含不超过3个变量的子句。

例如,对于原始布尔表达式 (a ∨ b ∨ c) ∧ (¬a ∨ ¬b ∨ ¬c ∨ d),我们可以将第二个子句分解为(¬a ∨ ¬b ∨ t) ∧ (¬t ∨ ¬c ∨ d),其中 t 是一个新的布尔变量。

可以证明,通过以上规则得到的3-SAT问题与原始SAT问题是等价的。因此,我们可以通过解决3-SAT问题来解决任意一个SAT问题,即SAT问题可以约化到3-SAT问题。

最后证明3-SAT问题是NP完备的

为了证明3-SAT问题是NP完备的,我们可以将该问题约化到某个已知的NP完备问题,例如图着色问题。

具体地,我们可以将每个3-SAT子句转化为一个具有3个颜色的顶点集合,并将每个颜色视为与一个变量的真、假和未定值对应。然后,我们可以给这些顶点分配颜色,使得相邻的顶点颜色不同。可以证明,如果一个3-SAT问题有解,则对应的图着色问题也有解。因此,我们可以通过解决图着色问题来解决任意一个3-SAT问题。

综上所述,SAT问题可以约化到3-SAT问题,而3-SAT问题是NP完备的,因此SAT问题也是NP完备的。