NP 完全理论
问题类型
易解问题和难解问题
通常将存在多项式时间算法的问题看作是易解问题(Easy Problem)。例如排序问题、查找问题等。
而将需要指数时间算法解决的问题看作是难解问题(Hard Problem)。例如旅行商问题、图着色问题等。
图灵停机问题则属于不可解问题。
P 类问题和 NP 类问题
- P 类问题可以用多项式时间的确定性算法来进行判定或求解。具体来说,P 问题是指多项式时间内可解的问题
- NP 类问题可用多项式时间的非确定性算法来进行判定或求解。具体来说,NP 问题是指多项式时间内可以验证一个解的问题。所有 NP 问题都是判定问题。
注:
- 多项式时间:、、;非多项式时间:、。
- 判定问题:仅仅要求回答
True
或False
的问题。判定问题的特点是证明比求解容易。
NP 问题
最优化问题可以与一个判断问题对应:
- 最优化问题: 取何值时, 取最小(大)值?
- 判定问题:给定 ,问是否存在常数 使得 取最小(大)值?
如何对应?
- 若判定问题多项式时间可解,则采用二分搜索策略即可。
- 反之,若已求解最优化问题,就已求解判定问题。
NP 完全问题
定义:问题 是一个 NP 完全问题,则有
- (多项式时间可验证解是否正确)
- 且对 (任意 NP 问题 都可在多项式时间归约到 )
注:
- NP 问题包含 P 问题和 NP 完全问题。
- P 问题和 NP 问题是否存在交集尚未定论,但目前学界普遍认为二者不存在交集。
一些基本的 NP 完全问题
- SAT 问题(布尔可满足性问题)
- 最大团问题
- 图着色问题
- 哈密尔顿回路问题
- TSP 问题(旅行商问题)
- 顶点覆盖问题
- 最长路径问题
- 子集和问题
NP 完全性的意义
- 若某个 NP 完全问题多项式时间可解,则所有 NP 问题均可多项式时间求解,从而有 。
- 若能证明某个 NP 问题不存在多项式时间求解算法(即 ),则所有 NP 完全问题都不存在多项式时间求解算法,从而有 。
因此,NP 完全问题是 NP 问题中最难的。
我们可以用下面的 Venn 图来表示这些概念之间的关系:
NP 完全性的证明
证明问题 是 NP 完全问题分两步:
- 是一个 NP 问题(多项式时间可验证解是否正确)。
- 从一个已知的 NP 完全问题 ,多项式时间归约到 的一个实例 ,证明 有解当且仅当 有解。