多项式复杂度
NP 问题中的 P 意思是 Polynomial,意为多项式复杂度。其中,O(1), O(log(n)), O(n), O(nlog(n)), O(n^2), … O(n^a) 这一类的复杂度(从小到大顺序)的问题是多项式复杂度的。他们的特点是,问题的复杂度不会因为 n 的增大而增大。相反,O(a^n) 和 O(n!) 这类问题因为问题的复杂度会因为 n 增大而增大,所以认为不是多项式的。举 2 个例子,
P 问题
1 | 找中位数问题 |
这种解答复杂度和验证复杂度都是 P 的就认为是 P 类问题。
NP Complete 问题
1 | 3 - SAT 问题 |
这种解答复杂度为非 P 而验证复杂度为 P 的就认为是 NP Complete 问题。
N == NP ?
回过头看,
- 当验证一个解答是否是这个问题的正确答案的复杂度是 P 的时候,这个问题是 NP 问题
- 在 1 的基础上,我们发现如果解决这个问题的复杂度是 P 的时候,这个问题是 P 问题
- 在 1 的基础上,我们发现解决这个问题的复杂度不是 P 的时候,这个问题是 NP Complete 问题
当我们研究这个世界的问题的时候,有人认为所有的 NP 问题都是 P 问题;有人则认为一定不是所有的 NP 问题都是 P 问题。在计算机科学的颠峰上,人类的智慧一直在为证明 N == NP 做出努力。