认识算法复杂度

多项式时间

        容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
        多项式时间指的是一个算法的复杂度,在时间复杂度的计算中常用的时间复杂度按照耗费的时间从小到大依次是:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)。只要算法的复杂度不会是最后两个指数或者阶乘型,前面的O(1)到O(n^m)(m为常数)任意组合都算是多项式级的复杂度,它们的规模n都出现在底数位置;而O(2ⁿ),O(n!)型 复杂度,就是非多项式级的,问题规模较大时,计算机也很难算出结果。所以我们一般会选择多项式级复杂度的算法。

猜你喜欢

转载自blog.csdn.net/evsqiezi/article/details/81836180