b 樹時間複雜度 第2天 演算法複雜度

2021-10-11 06:04:38 字數 2227 閱讀 8979

作為一名合格的計算機人員,無論是做開發還是研究演算法,乙個程式的演算法複雜度顯得尤為重要。因此,一般我們在大一的時候,無論在學哪門程式語言之前都會提到演算法的時間複雜度。但是均不會提的太深。但是作為一名從事計算機開發人員,我們應該深入了解時間複雜度是特別有必要的。接下來就給大家深入的分析一下時間複雜度。

維基百科是這樣介紹演算法的時間複雜度:在電腦科學中,演算法的時間複雜度(time complexity)是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。說的通俗一點就是:時間複雜度指的是程式執行所占用的時間,並且在執行程式過程中執行的運算元。空間複雜度指的是程式所占用的空間。

這裡需要我們注意的是下面的三個條件;如果寫成詳細的數學公式如下:

具體我們舉幾個案例來掌握這個公式和三個條件的應用

1、求t(n) = 3t(n/2) + n^2的時間複雜度

2、求t(n) = 4t(n/2) + n^2的時間複雜度

3、求t(n) = 16t(n/4) + n的時間複雜度

從這三道題中我們可以得出其實這三個條件,就是比較n^(log_b_a)和f(n),誰大誰就是最終的時間複雜度,如果相等的話,就在時間複雜度的基礎上新增乙個logn。

相信大家都知道斐波那契數,那個通項公式就是f(n) = f(n-1)+f(n-2), 其中n>=3;當n為1, 2時,f(n) = 1; 那麼它的時間和空間複雜度應該怎麼計算呢?

首先我們應該弄清楚其計算方式。

假如我們要計算f(6),以下是計算過程:

由此遞迴樹可知,計算f(6)需要計算f(1)和f(2)的次數為2^6.因此計算斐波那契數列需要的時間複雜度為o(2 ^n).空間複雜度可以通過乙個棧來模擬其操作,因此需要o(n)。但是,我們要知道之所以時間複雜是指數型的,是因為在計算過程中有很多重複項需要計算,因此,我們將遞迴改為迭代,通過乙個陣列來儲存計算好的資料,如果是這樣,我們的時間複雜度為o(n),如果直接定義兩個變數儲存,則只需要空間複雜度為o(1)。

知道時間複雜度計算之後,我們應該了解演算法中經常遇到的這四種問題:

1、首先就是p問題,通俗的將就是乙個問題可以在多項式(o(n^k))的時間複雜度內解決,即計算機比較容易算出答案的問題。

2、np問題:問題的解可以在多項式的時間內被驗證;簡單來說就是已知答案以後計算機可以比較容易地驗證答案的問題。

3、nph問題:任意np問題都可以在多項式時間內歸約為該問題,但該問題本身不一定是np問題;也就是給出乙個答案,計算機可能驗證也可能驗證不了。

4、npc問題:既是np問題,也是np-hard問題。

最後我們可以通過一張圖來清晰的看出這四者之間的關係。

本文詳細的介紹了時間複雜度,以及在設計乙個演算法時,經常遇到的四類問題。計算乙個演算法的時間複雜度,是我們作為一名演算法的設計者應該具備的知識,因此,需要我們熟練掌握本文給出的方法,尤其是主定理,是遞迴中最常用的方法。當然,我們也理解了p、np、nph和npc四類問題的大致情況,最後通過一張圖將其清晰的展現出來。希望對初學者在演算法複雜度上有所幫助。

[1] 維基百科

[2] 主定理(master theorem)與時間複雜度

[3] 面試_什麼是p、np、npc、nph問題

[4] np問題、np難問題(nph)和np完全問題(npc)理解

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...