多项式时间是指一个问题的计算时间不大于问题规模的多项式倍数,多项式时间代表的是一类时间复杂度的统称。这里的计算时间不是具体的时间,而是指解决问题时使用的算法的时间复杂度。
时间复杂度表示的是在解决一个问题时,随着问题规模的扩大,解决问题所需要的时间的增长情况。在计算机科学中,用时间复杂度来衡量算法的效率。如果不管数据规模有多大,程序处理花的时间始终是固定的,那么就说这个程序具有O(1)的时间复杂度,也称常数复杂度。如果数据规模变得有多大,程序处理花的时间也跟着变得有多长,那么这个程序的时间复杂度就是O(),也称线性复杂度。数据规模与花费的时间成对数关系,那么这个程序的时间复杂度就是O(
),也称对数复杂度。常见的还有O(
)、O(
)、O(
)、O(
)(a为常数)、O(
)。
上述的这些复杂度明显的可以分为两类,一类是O(1)、O()、O(
)、O(
)(a为常数)等,是多项式级的复杂度,另一类是O(
)(a为常数)、O(
)等,是非多项式级的复杂度。后者的复杂度远远大于前者。在解决问题时,选择的算法通常是多项式级的复杂度,非多项式级的复杂度需要的时间太多,除非是数据规模非常小。
常见多项式时间复杂度的关系为:
O(1)<O()<O(
)<O(
)<O(
)<O(
)
常见非多项式时间复杂度关系为:
O()<O(
)<O(
)