NP 完全性的证明
引理:如果语言
证明:
根据假设,
那么,如果
证明某种语言 是 NP 完全问题的方法
- 证明
- 选取一种已知的 NP 完全语言
- 描述一种可计算函数
的算法,其中 可将 中每一个实例 映射为 中的实例 - 证明函数
满足 当前仅当对于所有的 都有 - 证明计算函数
的算法具有多项式运行时间
第 2 步 ~ 第 5 步是为了证明
典型 NPC 问题
一些典型的 NPC 问题
- SAT:布尔公式的可满足性问题
- 3-CNF-SAT:3 合取范式的布尔公式的可满足性问题
- 团问题 CLIQUE:寻找无向图中的最大团
- 顶点覆盖问题 VERTEX COVER:在无向图中找出最小规模的顶点覆盖
- 哈密顿回路问题 HAM-CYCLE:无向图中是否存在哈密顿回路,即通过每个顶点的简单回路
- 旅行商问题 TSP:寻找通过无向图每个顶点一次的最小回路
- 子集和问题 SUBSET-SUM:给定正整数集合和正整数 t,判断是否存在一个子集的元素和为 t
布尔组合电路
布尔组合电路由一个或多个布尔组合元素通过线路连接而成,布尔组合电路是不包括回路的。
一个布尔组合电路的真值赋值是指一组布尔输入值。如果一个单输出布尔组合电路具有可满足性赋值,则称该布尔组合电路是可满足的。
布尔值取自集合
布尔组合元素称为逻辑门:
For example:
- 对此电路的输入赋值
,使得电路的输出为 1,那么电路是可满足的。 - 如果对此电路输入的任何一种赋值都不能使得输出为 1,则电路不满足。
NP 完全性证明
给定一个电路 C,通过检查输入的所有可能赋值来确定它是否来自可满足性电路。
那么,如果有
所以当电路 C 的规模为
布尔可满足性问题 SAT
定理:布尔公式的可满足性问题是 NP 完全的。
证明:
- 证明
,即证明对于输入公式 ,由它的一个可满足性赋值所组成的证书可以在多项式时间内得到验证 - 证明
从而得出 SAT 是 NP-hard - 根据语言
且 能推出 ,得证
3-CNF 可满足性
即布尔公式中的一个文字(literal)是指一个变量或非 “
合取范式
如果一个布尔公式可以表示为所有子句的“与”,并且每个字句都是一个或多个文字的“或”,则称该布尔公式为合取范式。
如果每个字句恰好有三个不同的“文字”,则该布尔公式为 3 合取范式,即 3-CNF。
For example:
合取范式
定理:3 合取范式形式的布尔公式的可满足性是 NP 完全的。
证明:要证明
团问题 CLIQUE
无向图
一个团是
团问题就是关于寻找图中规模最大的团的优化问题。
事实上,团问题的有效算法是不大可能存在的。因为要确定一个具有
列出V的所有规模为
形式语言定义
定理:
证明:首先,证明
- 对于一个给定的图
,用图中顶点集 作为 的一个证书。对于任意一对顶点 ,通过检查边 是否属于 ,就可以在多项式时间内确定 是否是团。 - 通过证明
来说明 。
顶点覆盖问题 Vertex Cover
无向图
顶点覆盖的规模是指它所包含的顶点数。顶点覆盖问题就是在一个给定的图中,找出具有最小规模的顶点覆盖。
形式语言定义
定理:
证明:首先,证明
哈密顿回路问题 HAM-CYCLE
定理:哈密顿回路问题是 NP-Complete
证明:首先,证明
旅行商问题 TSP
形式语言定义
定理:旅行商问题是 NP-Complete
证明:首先,证明
子集和问题 SUBSET-SUM problem
给定一个正整数有限集
形式语言定义
定理:子集和问题是 NP-Complete
证明:首先,证明