P、NP 和 NP-完全问题是计算复杂性理论中的核心概念,用来分类根据其难度解决的决策问题。以下是这些类别的定义、特征和例子:
P 类问题
定义:
- P(Polynomial time)是指能够在多项式时间内被确定型图灵机(即标准计算机模型)解决的问题类别。
特征:
- 一个问题属于P类意味着存在一个算法,该算法能在输入大小n的多项式时间内解决问题。
- 多项式时间意味着算法的时间复杂度是O(n^k),其中k是一个常数。
例子:
- 最短路径问题:给定一个加权图和两个顶点,找到连接这两个顶点的最短路径。
- 排序问题:将一组数字按升序或降序排列。
- 线性规划问题:在满足线性约束条件的情况下最大化或最小化线性目标函数。
NP 类问题
定义:
- NP(Nondeterministic Polynomial time)是指可以在非确定型图灵机上于多项式时间内验证解的正确性的所有问题的集合。
特征:
- 如果一个问题属于NP类,那么对于每一个可能的解,可以快速(在多项式时间内)检查它是否确实是问题的一个解。
- NP类包括所有P类问题以及一些更难的问题,后者可能需要超出多项式时间来求解。
例子:
- 子集和问题:给定一组整数,是否存在一个非空子集其成员之和等于零。
- 图着色问题:给定一个无向图,使用不超过k种颜色对图进行着色,使得没有相邻节点具有相同的颜色。
- 满足性问题(SAT):给定一个布尔表达式,是否存在一种变量赋值使得表达式的值为真。
NP-完全问题
定义:
- NP-完全问题是NP中最难的问题,它们不仅属于NP,而且任何一个NP问题都可以在多项式时间内归约到它们。
特征:
- 如果能够找到一个多项式时间算法解决任何一个NP-完全问题,则所有NP问题都可以在多项式时间内解决,这意味着P=NP。
- 目前为止,还没有找到任何NP-完全问题的多项式时间解决方案,但也没有证明这样的解决方案不存在。
例子:
- 旅行商问题(TSP):给定一系列城市和每对城市之间的距离,寻找一条最短路径,使得访问每个城市恰好一次并返回起始城市。
- 顶点覆盖问题:在一个无向图中,找到最小数量的顶点,使得图中的每条边至少有一个端点在这个顶点集中。
- 布尔可满足性问题(3-SAT):给定一个合取范式的布尔公式,其中每个子句恰好包含三个文字,判断是否存在一个真值分配使整个公式为真。