多项式时间:多项式时间

多项式时间是指一个问题的计算时间不大于问题规模的多项式倍数,多项式时间代表的是一类时间复杂度的统称。这里的计算时间不是具体的时间,而是指解决问题时使用的算法的时间复杂度。

时间复杂度表示的是在解决一个问题时,随着问题规模的扩大,解决问题所需要的时间的增长情况。在计算机科学中,用时间复杂度来衡量算法的效率。如果不管数据规模有多大,程序处理花的时间始终是固定的,那么就说这个程序具有O(1)的时间复杂度,也称常数复杂度。如果数据规模变得有多大,程序处理花的时间也跟着变得有多长,那么这个程序的时间复杂度就是O(n),也称线性复杂度。数据规模与花费的时间成对数关系,那么这个程序的时间复杂度就是O(log^n),也称对数复杂度。常见的还有O(n^2)、O(n^3)、O(nlog^n)、O(a^n)(a为常数)、O(n!)。

上述的这些复杂度明显的可以分为两类,一类是O(1)、O(n)、O(log^n)、O(n^a)(a为常数)等,是多项式级的复杂度,另一类是O(a^n)(a为常数)、O(n!)等,是非多项式级的复杂度。后者的复杂度远远大于前者。在解决问题时,选择的算法通常是多项式级的复杂度,非多项式级的复杂度需要的时间太多,除非是数据规模非常小。

常见多项式时间复杂度的关系为:

O(1)<O(log^n)<O(n)<O(nlog^n)<O(n^2)<O(n^3)

常见非多项式时间复杂度关系为:

O(2^n)<O(n!)<O(n^n)

相关推荐

相关文章