基本概念
这些概念的定义参考《算法导论》[1]
P问题
存在一个多项式时间的求解算法
NP问题
给定一个问题A,和问题的一个解X,存在一个多项式时间的验证算法。该验证算法证明X是否是A的一个解。
复杂类co-NP
所有满足NP的语言L,L的补集构成的集合。
co−NP={L|L¯¯¯∈NP}
NPC问题
某个问题是NPC问题,需要满足两个条件
- 第一,L是个NP问题
- 第二,所有的NP问题L’都可以归约到L.
L′≤pL
NP-hard问题
某个问题是NP-hard问题,需要满足条件:所有的NP问题L’都可以归约到L
NPC问题及其证明技巧
- circut-SAT
- SAT
- 3-CNF-SAT
觉得这个好用 - Clique 团问题
- vertex cover 顶点覆盖问题
- Ham-cycle 哈密顿回路问题
- TSP 旅行商问题
- subset-sum 子集和问题
应用场景
思路一,依据定义证明;
思路二,构造归约算法证明,归约算法的时间复杂度是多项式的。常用。
证明一个问题L是p问题
- 选一个已知的p问题
- 构造一个归约算法L’, 使得L可归约到L’,且该归约算法的复杂度是多项式的。
证明一个问题是npc问题
- 证明待证明的问题L是NP问题
- 选一个已知的NPC问题L’
- 构造一个归约算法,使得L’可归约到L. 且该归约算法的复杂度是多项式的。
参考文献
[1] 算法导论 机械工业出版社 2013