時間複雜度

2021-09-27 08:12:15 字數 1180 閱讀 9640

分析乙個演算法的好壞,時間複雜度是乙個很重要的標準。那麼什麼是時間複雜度呢?

舉個栗子,

a和b要從同乙個起點x出發,去目的地y,從x到y有很多種方式。a選擇步行過去,b選擇打車過去。那麼通常情況下,b會比a先到目的地y。

這個例子中,從x到y就是程式需要實現的功能,而步行和打車相當於兩種不同的演算法,但是這兩種演算法實現的功能是一樣的。顯然這兩種不同的演算法為了實現同乙個功能花費的時間是不同的。

在電腦科學中,時間複雜度,就是這樣乙個定性地描述該演算法執行時間的指標。時間複雜度通常用大寫的『o』表示。

常見的演算法時間複雜度有(從小到大排):

o(1)常數階

我們消耗的時間為t(3)=t(2)+t(1)+1,加1是因為除了f(2)和f(1)消耗的時間外,計算f(3)進入遞迴也消耗了1單位時間。

故運算完f(n)所花費時間為,t(n) = t(n-1) + t(n-2) + 1

變形,(t(n) + 1) = (t(n-1) + 1) + (t(n-2) + 1)

令b(n) = t(n) + 1,

得b(n) = b(n-1) + b(n-2)

可見b(n)也是乙個斐波那契數列,

所以時間複雜度t(n) = b(n) - 1,實際消耗如下圖,

就這樣,最頂層消耗由f(n-1)和f(n-2)的消耗時間t(n-1)和t(n-2)組成,每層都是一分為二,二分為四,因為n的範圍是n<=45,當n達到45時,上述計算的節點達到恐怖的(2^44)這個級別(係數可忽略不計)。這是不可想象的,因為遞迴的過程中進行了大量的無用的重複運算。

如果我們採用非遞迴的方法遞推的話,十分簡單,時間複雜度為o(n)。樣例**如下:

for(int i = 3; i <= n; i++)

消耗節點如下:

最終只執行了(n)這個級別的次數。

所以在解題碼**之前,進行時間複雜度的分析是非常重要的。

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

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

時間複雜度 空間複雜度

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

時間複雜度 空間複雜度

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