演算法的執行時間通常與下列函式成比例:
1
大部分程式的大部分指令之執行一次,或者最多幾次。如果乙個程式的所有指令都具有這樣的性質,我們說這個程式的執行時間是常數。
logn
如果乙個程式的執行時間是對數級的,則隨著n的增大程式會漸漸慢下來,如果乙個程式將乙個大的問題分解成一系列更小的問題,每一步都將問題的規模縮減成幾分之一,一般就會出現這樣的執行時間函式。在我們所關心的範圍內,可以認為執行時間小於乙個大的常數。對數的基數會影響這個常數,但改變不會太大:當n=1000時,如果基數是10,logn等於3;如果基數是2,logn約等於10.當n=1 00 000,logn只是前值的兩倍。當n時原來的兩倍,logn只增長了乙個常數因子:僅當從n增長到n平方時,logn才會增長到原來的兩倍。
n
如果程式的執行時間的線性的,很可能是這樣的情況:對每個輸入的元素都做了少量的處理。當n=1 000 000時,執行時間大概也就是這個數值;當n增長到原來的兩倍時,執行時間大概也增長到原來的兩倍。如果乙個演算法必須處理n個輸入(或者產生n個輸出),那麼這種情況是最優的。
nlogn
如果某個演算法將問題分解成更小的子問題,獨立地解決各個子問題,最後將結果綜合起來,執行時間一般就是nlogn。我們找不到乙個更好的形容,就暫且將這樣的演算法執行時間叫做nlogn。當n=1 000 000時,nlogn大約是20 000 000。當n增長到原來的兩倍,執行時間超過原來的兩倍,但超過不是太多。
n^2
如果乙個演算法的執行時間是二次的(quadratic),那麼它一般只能用於一些規模較小的問題。這樣的執行時間通常存在於需要處理每一對輸入資料項的演算法(在程式中很可能表現為乙個巢狀迴圈)中,當n=1000時,執行時間是1 000 000;如果n增長到原來的兩倍,則執行時間將增長到原來的四倍。
n^3
類似的,如果乙個演算法需要處理輸入資料想的三元組(很可能表現為三重巢狀迴圈),其執行時間一般就是三次的,只能用於一些規模較小的問題。當n=100時,執行時間就是1 000 000;如果n增長到原來的兩倍,執行時間將會增長到原來的八倍。
2^n
如果乙個演算法的執行時間是指數級的(exponential),一般它很難在實踐中使用,即使這樣的演算法通常是對問題的直接求解。當n=20時,執行時間是1 000 000;如果增長到原來的兩倍時,執行時間將是原時間的平方!
log log n 可以看作是乙個常數:即使n很多,兩次去對數之後也會變得很小
排序演算法時間複雜度和空間複雜度比較
n 2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序 排序方法平均時間最好時間最壞時間 桶排序 不穩定 o n o n o n 基數排序 穩定 o n o n o n 歸併排序 穩定 o nlogn o nlogn o nlogn 快速排序 不穩定 o nlogn o nlogn o n ...
各種排序演算法比較 時間複雜度,空間複雜度
n 2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序 排序方法平均時間最好時間最壞時間 桶排序 不穩定 o n o n o n 基數排序 穩定 o n o n o n 歸併排序 穩定 o nlogn o nlogn o nlogn 快速排序 不穩定 o nlogn o nlogn o n ...
演算法時間複雜度
乙個演算法的時間複雜度 time complexity 是指該演算法的執行時間與問題規模的對應關係。乙個演算法是由控制結構和原操作構成的,其執行的時間取決於二者的綜合效果。為了便於比較同一問題的不同演算法,通常把演算法中基本操作重複執行的次數 頻度 作為演算法的時間複雜度。演算法中的基本操作一般是指...