常用算法的时间复杂度分析

按数量级递增排列,常见的时间复杂度有:
常数阶O(1),对数阶O(log2n),线性阶O(n),
线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,

k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

时间复杂度:基本操作重复执行的次数的阶数 T(n)=o(f(n))
以下六种计算算法时间的多项式是最常用的。其关系为:
 O(1)<O(logn)<O(n)<O(nlogn) <O(n2)<O(n3)
指数时间的关系为:
   O(2n)<O(n!)<O(nn)
   当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊。

以下是一些常见时间复杂度的例子。

名称     复杂度类     运行时间(T(n))     运行时间举例     算法举例
常数时间     
    O(1)     10     判断一个二进制数的奇偶
反阿克曼时间     
    O(\alpha(n))     
    并查集的单个操作的平摊时间
迭代对数时间     
    O(\log^{*}n)     
    en:Cole-Vishkin algorithm
对数对数时间     
    O(\log \log n)     
    有界优先队列的单个操作[1]
对数时间     DLOGTIME     O(\log n)     \log n,\log n^2     二分搜索
幂对数时间     
    (\log n)^{O(1)}     (\log n)^2     
(小于1次)幂时间     
    O(n^c),其中0 < c < 1     n^{\frac{1}{2}},n^{\frac{2}{3}}     K-d树的搜索操作
线性时间     
    O(n)     n     无序数组的搜索
线性迭代对数时间     
    O(n\log^{*}n)     
    Raimund Seidel的三角分割多边形算法
线性对数时间     
    O(n\log n)     n\log n,\log n!     最快的比较排序
二次时间     
    O(n^2)     n^2     冒泡排序、插入排序
三次时间     
    O(n^3)     n^3     矩阵乘法的基本实现,计算部分相关性
多项式时间     P     2^{O(\log n)} = n^{O(1)}     n,n \log n,n^{10}     线性规划中的en:Karmarkar's algorithm,AKS质数测试
准多项式时间     QP     2^{(\log n)^{O(1)}}     
    关于有向斯坦纳树问题最著名的O(\log^2 n)近似算法
次指数时间(第一定义)     SUBEXP     O(2^{n^{\epsilon}}),对任意的ε > 0     O(2^{(\log n)^{\log \log n}})     Assuming complexity theoretic conjectures, BPP is contained in SUBEXP.[2]
次指数时间(第二定义)     
    2o(n)     2n1/3     Best-known algorithm for integer factorization and graph isomorphism
指数时间     E     2O(n)     1.1n, 10n     使用动态规划解决旅行推销员问题
阶乘时间     
    O(n!)     n!     通过暴力搜索解决旅行推销员问题
指数时间     EXPTIME     2poly(n)     2n, 2n2     
双重指数时间     2-EXPTIME     22poly(n)     22n     Deciding the truth of a given statement in Presburger arithmetic



常用时间复杂度如图:



 
---------------------  
作者:听见下雨的声音hb  
来源:CSDN  
原文:https://blog.csdn.net/u010010664/article/details/78834695  
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自www.cnblogs.com/fengff/p/10950786.html