1-P, NP, NPC和NP-Hard问题
1-P, NP, NPC和NP-Hard问题
1 P问题、NP问题、NP完全问题(NPC)和NP难问题(NP-Hard)
1.1 P类问题(Polynomial Time)
可以在多项式时间内求解的问题。
- 定义:所有能在多项式时间内用确定性算法求解的决策问题。例如排序(O(n^2))、查找最大值(O(n))等。
- 特点:算法的时间复杂度为多项式级(如O(n^k),k为常数),计算效率高,实际应用中可快速解决。
- 举例:最短路径问题、矩阵乘法等。
1.2 NP类问题(Nondeterministic Polynomial Time)
可以在多项式时间内验证的问题。
- 定义:所有能在多项式时间内验证解的正确性的决策问题。即存在一个算法,在多项式时间内验证给定解是否满足条件。
- 特点:
- 验证容易,求解未知:例如旅行商问题(TSP),验证一条路径是否小于给定长度是容易的,但找到最短路径的算法目前未知。
- P ⊆ NP:所有P类问题都属于NP类,因为多项式时间求解后自然可以快速验证。
- 未解之谜:是否所有NP问题都属于P(即P=NP?),这是计算机科学的核心难题。
1.3 NP完全问题(NP-Complete, NPC)
只要找到二元一次方程的解法,就可以通过设y=0的方式求解更简单的一元一次方程。 一个简单的NP问题,可以规约为更复杂的问题。通过不断规约,可以得到一个最难的NP问题。实际上,所有NP问题最终都可以规约为一个最难NP问题,该问题称为NPC问题。 要证明一个问题是NPC问题,可以通过从SAT规约的方法: NPC问题之间可以互相规约。第一个得到证明的问题是SAT问题。所以如果一个问题:(1)是NP问题;(2)可以通过SAT问题规约得到,则该问题是NPC问题。
- 定义:满足两个条件的问题:
- 属于NP类;
- 所有NP问题都可以多项式归约到它(即它是NP中最难的问题)。
- 特点:
- 若某个NPC问题存在多项式解法,则所有NP问题都可多项式解决(即P=NP)。
- 目前未发现NPC问题的多项式解法,但也没有严格证明不存在。
- 举例:
- 3-SAT问题(布尔可满足性问题,见sat.pdf);
- 旅行商问题(TSP);
- 哈密顿回路问题。
1.4 NP难问题(NP-Hard)
NP难问题不一定是NP问题。但所有NP问题可以归约到它。
- 定义:所有至少与NP问题一样难的问题,满足:
- 所有NP问题可多项式归约到它;
- 不要求属于NP类(即可能比NP更难)。
- 特点:
- NP难问题不一定是NP问题,例如停机问题(不可判定)是NP难的。
- NPC是NP与NP难的交集。
- 举例:
- 整数线性规划;
- 停机问题(非NP问题,但属于NP难)。
NP难问题的求解方法 尽管NP难问题通常很难找到精确解,但研究者们已经开发出了多种方法来求解或近似求解这些问题。这些方法包括:
- 近似算法:对于某些NP难问题,可以设计出近似算法来找到一个近似最优解,而不是精确的最优解。
- 概率算法:通过引入随机性,概率算法在某些情况下能够以较高的概率快速找到解。
- 并行计算:利用多个处理器同时执行计算,以加快求解过程。
- 智能算法:如遗传算法、模拟退火等,这些算法模拟自然过程中的优化机制,用于求解优化问题。
2 背景知识
2.1 合取范式(CNF)的概念与应用
如何理解3-sat问题定义里的子句,命题变元和文字? - 菜鸟天堂的回答 - 知乎 问题:是否存在年夜饭,使得每个人至少有一条愿望被满足。每个人的愿望是一个逻辑文字,愿望单是子句,由愿望组成;合取范式(CNF)是所有人愿望单的集合。
合取范式(Conjunctive Normal Form,简称CNF)是逻辑学中命题公式的一种标准形式。它是由一系列子句(clauses)组成的,每个子句是一个或多个逻辑文字(literals)的析取(disjunction),而整个合取范式则是这些子句的合取(conjunction)。换言之,合取范式是子句的合集,每个子句是文字的集合。
合取范式的结构:
- 文字(Literal):一个命题变量或其否定。
- 子句(Clause):一个或多个文字的析取。
- 合取范式:多个子句的合取。
转换为合取范式的过程涉及逻辑等价变换,例如分配律、德摩根定律等。任何命题公式都可以转换为合取范式,这一过程可以通过真值表或等价变换实现12。
合取范式的应用:
- 逻辑判断:合取范式用于判断命题公式的逻辑属性,如是否为重言式或矛盾式。
- 逻辑推理:在自动定理证明和逻辑编程中,合取范式是推理算法的基础。
- 计算机科学:在计算机科学中,特别是在布尔代数和可满足性问题(SAT)中,合取范式扮演着重要角色。
合取范式的特点:
- 非唯一性:一个命题公式可能有多个不同的合取范式。
- 等价性:所有合取范式都与原命题公式逻辑等价。
This post is licensed under CC BY 4.0 by the author.