時間複雜度 簡單易懂

2021-09-28 13:35:23 字數 2429 閱讀 8267

時間複雜度

概念:1、時間複雜度&漸進時間複雜度

乙個是時間複雜度,乙個是漸近時間複雜度。前者是某個演算法的時間耗費,它是該演算法所求解問題規模n的函式,而後者是指當問題規模趨向無窮大時,該演算法時間複雜度的數量級。

當我們評價乙個演算法的時間效能時,主要標準就是演算法的漸近時間複雜度

2、頻度

乙個演算法中的語句執行次數稱為語句頻度時間頻度,記為t(n)

3、nn為問題的規模,那麼t(n),毫無疑問跟規模有關

4、f(n)

t(n)=o(f(n))簡稱為時間複雜度,為什麼?

在這裡f(n)這是乙個輔助函式,如果

使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式;所以,哪怕兩個演算法頻度不同,其時間複雜度卻有可能相同

記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低

存在常數 c 和函式 f(n),使得當 n >= c 時 t(n) <= f(n),表示為 t(n) = o(f(n))

當 n >= 2 的時候,f(n) = n^2 總是大於 t(n) = n + 2 的,於是我們說 f(n) 的增長速度是大於或者等於 t(n) 的,也說 f(n) 是 t(n) 的上界,可以表示為 t(n) = o(f(n))。

因為f(n) 的增長速度是大於或者等於 t(n) 的,即t(n) = o(f(n)),所以我們可以用 f(n) 的增長速度來度量 t(n) 的增長速度,所以我們說這個演算法的時間複雜度是 o(f(n))。 演算法的時間複雜度,用來度量演算法的執行時間

記作: t(n) = o(f(n))。

它表示隨著 輸入大小n 的增大,演算法執行需要的時間的增長速度可以用 f(n) 來描述。 顯然如果 t(n) = n^2,那麼 t(n) = o(n^2),t(n) = o(n^3),t(n) = o(n^4) 都是成立的,但是因為第乙個 f(n) 的增長速度與 t(n) 是最接近的,所以第乙個是最好的選擇,所以我們說這個演算法的複雜度是 o(n^2)

如果是t(n) = c,c是乙個常數,那麼這個func的時間複雜度就是o(1)

如果是t(n) = an + c;那麼就是o(n)

如果是t(n) = an^2 + c;那麼就是o(n^2)

依次類推,就是取函式的最高n次項

如果是迴圈的話:

1.對於乙個迴圈,假設迴圈體的時間複雜度為 o(n),迴圈次數為 m,則這個 迴圈的時間複雜度為 o(n×m)

void afunc(int n) }
此時時間複雜度為 o(n × 1),即 o(n)

2.對於多個迴圈,假設迴圈體的時間複雜度為 o(n),各個迴圈的迴圈次數分別是a, b, c...,則這個迴圈的時間複雜度為 o(n×a×b×c...) 分析的時候應該由里向外分析這些迴圈。

void afunc(int n) 

}}

此時時間複雜度為 o(n × n × 1),即 o(n^2)

3.對於順序執行的語句或者演算法,總的時間複雜度等於其中最大的時間複雜度。

void afunc(int n) 

}// 第二部分時間複雜度為 o(n)

for(int j = 0; j < n; j++)

}

此時時間複雜度為 max(o(n^2), o(n)),即 o(n^2)。

4.對於條件判斷語句,總的時間複雜度等於其中 時間複雜度最大的路徑 的時間複雜度

void afunc(int n) 

}} else }}

此時時間複雜度為 max(o(n^2), o(n)),即 o(n^2)

以上舉例了一些簡單的時間複雜度,現在列舉常見的:

常見的時間複雜度,按數量級遞增排列依次為:

常數階o(1)、對數階o(log2n)、線性階o(n)、線性對數階o(nlog2n)、平方階o(n^2)、立方階o(n^3)、k次方階o(n^k)、指數階o(2^n)

這些複雜度有乙個經驗規則:

c < log2n < n < n * log2n < n^2 < n^3 < 2^n < 3^n < n!

時間複雜度就是這樣計算得來的,如果不會算也不要緊,但是起碼要知道大概平時寫**的時候,什麼**跑的快,效能好,什麼**跑的慢,效能差;大概的印象還是要有的

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...

時間複雜度 空間複雜度

時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...

時間複雜度 空間複雜度

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...