常用算法的时间复杂度分析
Posted fengff
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用算法的时间复杂度分析相关的知识,希望对你有一定的参考价值。
按数量级递增排列,常见的时间复杂度有:
常数阶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
版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于常用算法的时间复杂度分析的主要内容,如果未能解决你的问题,请参考以下文章