按數量級遞增排列,常見的時間復雜度有:
常數階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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!