如果一个算法的运行时间上限为一个多项式表达式(例如T(n) = O(nk),其中k为常量,则称该算法为“多项式时间算法”(polynomial time)。
上例中我们也可以称这种算法的复杂度为O(nk)。可以用这种方法解决的问题是“快速问题”,简单的说需要比较短的时间就能完成,而不是几个世纪。
可以由计算机在多项式时间内解决的问题的集合为P。NP表示一个更大的集合,他们的解可以在多项式时间内被验证。例如对于旅行推销员问题和背包问题来说,我们不知道它们是否是P问题,因为没有人能给出一个多项式时间算法,也没有人能证明该算法不存在。
但是旅行推销员问题和背包问题都是NP问题,因为解答都可以在很短的时间内被验证是否正确--找到问题的答案和验证是两种不同的操作。
到现在为止没有人能证明P=NP,也没有人能证明P不等于NP。