常用时间复杂度

按数量级递增排列,常见的 时间复杂度有:
常数阶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) 
  
 
  
 
  

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

名称 复杂度类 运行时间(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)} nn \log nn^{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

你可能感兴趣的:(数据结构)