迄今为止,我们所研究的所有算法几乎都是多项式时间的算法:对于规模为n的输入,在最坏情况下的运行时间是O(n^k),其中k为某一确定的常数。
如果一个判定问题的复杂度是该问题的一个实例的规模n的多项式函数,则这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题集合。通俗地称所有复杂度为多项式时间的问题为易解问题的问题类,否则为难解问题。
关于多项式时间。什么是多项式?小学时就接触过这样的方程式...
ax+b=0,ax^2+bx+c=0
第一,虽然把所需运行时间为O(n^100)的问题作为“难处理问题”也有其合理之处,但实际中却只有极少数问题需要如此高次的多项式时间,且经验表明,一旦某一问题的第一个多项式时间算法被发现后,往往跟着就会发现更为有效的算法。第二,对很多合理的计算模型来说,在一个模型上用多项式时间可解决的问题,在另一个模型上也可以在多项式时间内解决。第三,由于在加法、乘法和组合运算下多项式是封闭的,因此,多项式时间可解问题具有很好的封闭性。
反之,非多项式时间一般指指数增长模式,或更复杂模式。
然而有些问题很难找到多项式时间的算法(或许根本不存在)。但是如果给了该问题的答案,可以在多项式时间内判定这个答案是否正确。这种可以在多项式时间内验证一个解是否正确的问题称为NP问题(Non-deterministic Polynomial),亦称为易验证问题类。
简单地说,存在多项式时间的算法的一类问题,称之为P类问题;至今没有找到多项式算法解的一类问题,称