1 问题背景
如果想要了解P问题、NP问题、NP-Hard问题、NP-Complete问题之间的关系,那就需要从了解NP-complete问题和归约概念开始。上一篇文章中,我们介绍了计算复杂性理论的奠基之作《The Complexity of Theorem-Proving Procedures》,在这篇文章中,首次正式定义了NP-complete问题的概念,并且证明了第一个NP-Complete问题——布尔表达式可满足性问题(SAT)。
2 什么是归约
归约在文章《The Complexity of Theorem-Proving Procedures》是指,如果有一个解答器可以立即解决第二个问题,那么第一个问题也可以在多项式时间内被确定性地解决。
多项式时间归约(Polynomial-Time Reduction, 也叫Karp归约):如果问题A可以在多项式时间内归约到B问题,意味着存在一个多项式时间的算法,能够将A问题的每一个实例都转化为B问题的一个实例,并且只要有算法能够求解B问题,那个这个算法也能够求解A问题。也就是说,如果问题 A 可以归约为问题 B,那么B问题至少和A问题一样难,甚至可能更难。
我们思考,所有的NP问题里面是否有一些代表性的问题,能够将所有的NP问题都归约到这些问题,那么我解决了这些问题,不就解决了所有的NP问题吗。因此有了NP-Complete问题。
3 P、NP、NP-Hard、NP-Complete定义及关系
P问题:多项式时间内可求解。
NP问题:多项式时间内可验证。
NP-Complete问题:①是NP问题;②所有NP问题都能归约到这个问题。
NP-Hard问题:①可以是NP问题,也可以不是NP问题;②所有NP问题都能归约到这个问题。
关系图:
图来源:
布尔表达式可满足性问题(SAT)与库克-列文定理(上)_boolean satisfiability problem-CSDN博客
3.1 P问题
-
P问题是指那些可以在确定性图灵机上在多项式时间内解决的问题,P代表 "Polynomial time"(多项式时间)。
-
P与NP的关系:
- P问题可以看作是NP问题的子集,因为所有可以在多项式时间内解决的问题也可以在多项式时间内验证解(即P问题显然是NP问题)。
- 一个关键的未解问题是P是否等于NP。也就是说,我们不知道所有的NP问题(解可以在多项式时间内验证)是否都可以在多项式时间内解决。如果P=NP,那么所有NP问题就都可以通过多项式时间的算法解决;如果P≠NP,那么有些NP问题是无法在多项式时间内解决的。
3.2 NP问题
-
NP问题:NP(Nondeterministic Polynomial time)问题是指那些在多项式时间内可以通过非确定性图灵机(或等效地,能够在多项式时间内验证其解是否正确)的决策问题。换句话说,给定一个问题的解,可以在多项式时间内验证该解是否正确。NP问题并不一定有多项式时间的算法来找到解。
3.3 NP-Complete问题
-
NP完全问题(NP-Complete Problem):NP完全问题是NP问题中的一个子集,这些问题被认为是NP中最难的。一个问题是NP完全的,当且仅当:
- 它属于NP类。
- 任何其他NP问题都可以通过多项式时间的归约转换为这个问题。
换句话说,NP完全问题是NP问题中的“代表”,解决一个NP完全问题可以用来解决所有其他NP问题。因此,NP完全问题被认为是NP类中最难的问题。
3.4 NP-Hard问题
- NP难(NP-hard)指的是至少和NP问题一样难的问题。
- 一个问题是NP难的,如果每一个NP问题都可以多项式时间归约到它。也就是说,如果我们能在多项式时间内解决这个问题,那么所有NP问题也都可以在多项式时间内解决。
- 重要的是,NP难问题不一定是NP问题。这意味着,它们的解不一定能在多项式时间内验证,甚至可能不是决策问题(比如优化问题)。
注:3.1-3.4节内容来自于大语言模型。
4 文章推荐
由于知识有限,本文只是提一些概念,这里推荐两篇写得非常好的文章,有讲推导过程。
布尔表达式可满足性问题(SAT)与库克-列文定理(上)_boolean satisfiability problem-CSDN博客
上篇文章主要讲了计算复杂理论的一些基础知识,内容完整、思路清晰,非常值得刚入门的同学做了解!
下篇文章主要讲了库克-列文定理,介绍了布尔表达式可满足性问题(SAT)是NP-Complete问题的证明过程。