1. P问题(Polynomial Time)
- 定义:可以在多项式时间内被确定性图灵机解决的问题。
- 特点:
- 存在确定性算法,时间复杂度为 O ( n k ) O(n^k) O(nk) ( k (k (k 为常数)。
- 常见于实际应用中可高效解决的问题。
- 例子:
- 最短路径(Dijkstra算法, O ( n 2 ) O(n^2) O(n2))。
- 排序(快速排序, O ( n log n ) O(n \log n) O(nlogn))。
- 线性规划(某些情况)。
2. NP问题(Nondeterministic Polynomial Time)
- 定义:可以在多项式时间内被非确定性图灵机解决,或解的正确性可以在多项式时间内验证。
- 特点:
- 验证容易,求解难:找到解可能困难,但验证给定解的正确性是高效的。
- 所有P问题都属于NP(因为P的解可直接生成并验证)。
- 例子:
- 旅行商问题(TSP)的决策版本(是否存在总长度≤ k k k的路径)。
- 子集和问题(是否存在子集的和等于目标值)。
- 布尔可满足性问题(SAT)。
3. NP-Hard问题
- 定义:所有NP问题都可以在多项式时间内归约到该问题。
- 特点:
- 至少和NP问题一样难:如果NP-Hard问题有多项式时间解,则所有NP问题都可高效解决(即P=NP)。
- 可能不属于NP:解的正确性未必能在多项式时间内验证。
- 例子:
- 停机问题(无法验证解,属于NP-Hard但不属于NP)。
- TSP的最优化版本(寻找最短路径)。
- 整数线性规划。
4. NPC问题(NP-Complete)
- 定义:既是NP问题,又是NP-Hard问题。
- 特点:
- NP中的最难问题:如果任一NPC问题有高效解,则所有NP问题均可高效解决(P=NP)。
- 必须同时满足两个条件:属于NP,且所有NP问题可归约到它。
- 例子:
- 3-SAT(三元布尔可满足性问题)。
- 哈密顿回路问题。
- 背包问题的决策版本。
关键关系总结
类别 | 定义 | 与P/NP的关系 | 验证时间 |
---|---|---|---|
P | 确定性图灵机在多项式时间内解决的问题。 | P ⊆ N P P \subseteq NP P⊆NP | 多项式时间(直接求解) |
NP | 非确定性图灵机在多项式时间内解决,或解可在多项式时间内验证。 | P ⊆ N P P \subseteq NP P⊆NP(未证明是否相等) | 多项式时间(验证) |
NP-Hard | 所有NP问题可归约到该问题。 | 不一定是NP问题 | 可能超多项式时间 |
NPC | 属于NP且是NP-Hard的问题。 | N P C ⊆ N P ∩ N P -Hard NPC \subseteq NP \cap NP\text{-Hard} NPC⊆NP∩NP-Hard | 多项式时间(验证) |
图示关系
- P ⊆ NP:所有P问题也是NP问题。
- NPC ⊆ NP:NPC是NP的子集,同时是NP-Hard的子集。
- NP-Hard可能不属于NP(如停机问题)。
经典问题示例
问题类型 | P问题 | NP问题 | NPC问题 | NP-Hard问题 |
---|---|---|---|---|
路径问题 | 最短路径(Dijkstra) | 旅行商问题(TSP决策) | 哈密顿回路 | TSP最优化版本 |
逻辑问题 | - | 布尔可满足性(SAT) | 3-SAT | 整数规划 |
组合问题 | 排序 | 子集和问题 | 背包问题决策 | 图着色问题(最优化) |
P vs NP问题
- 未解之谜:是否所有NP问题都属于P?即 P = N P P = NP P=NP?
- 当前共识:认为 P ≠ N P P \neq NP P=NP,但未被严格证明。
- 意义:若 P = N P P = NP P=NP,则所有NP问题(包括密码学中的难题)均可高效解决,对计算机科学产生颠覆性影响。