時間複雜度和空間複雜度

2022-03-05 02:33:27 字數 1471 閱讀 6872

每個程式解決問題時都可能有不同的實現方法,也就是我們常說的演算法,而不同的演算法對計算機資源的占用都不一樣,因此我們常用演算法複雜度來衡量乙個演算法的優劣程度。

演算法複雜度是對程式計算機資源佔的度量,這些資源主要包括時間資源和記憶體資源,因此演算法複雜度又分為時間複雜度(時間資源的度量)和空間複雜度(記憶體資源的度量)。

演算法的時間複雜度簡單來說就是乙個函式,它定性描述了該演算法的執行時間

我們知道乙個程式的執行就是計算機內部的指令的執行,而每條指令執行的時間即指令週期大致相同,上公升到程式中或者說演算法上來,可以理解為每條語句執行的時間大致相同,所以只要計算出演算法中基本語句的執行次數就能定性地對時間複雜度進行度量。我們一般將執行次數的總和記為函式f(n),n是指問題的規模。

例如下面的演算法:

for(i=1; i<=n; ++i)

}

上面的演算法中有兩條基本語句也就是要執行的基本操作,操作①的執行次數為:n^2,操作②的執行次數為:n^3,所以該演算法的執行次數f(n) = n^2 + n^3。

其實函式f(n)就可以作為時間複雜度的計量函式,但我們通常使用t(n)=o(f(n))函式來代表時間複雜度。o(f(n))是取f(n)函式的最高次項(變化最快的項),再將係數化為1。即t(n) = o(f(n)) = o(n^3)。所以o(n^3)即為本例演算法的時間複雜度。

綜上:1)計算基本操作的執行次數f(n)。

2)將f(n)轉換為t(n)=o(f(n))。

o(1) <= o(log2(n)

) <= o(n) <= 

o(nlog2(n))

<= o(n^2) <= ... <= o(n^k) <= o(2^n)

當若干演算法的時間複雜度級別相同時,我們可以考慮演算法的資料輸入狀態,即除了指令的執行時間,資料的儲存時間也是時間資源。

演算法的實現首先需要暫存器對資料和指令進行臨時儲存,這就需要占用到記憶體等資源,空間複雜度就是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)。

比如直接插入排序的時間複雜度是o(n^2),空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法的執行時間和所需要占用的儲存空間兩個方面衡量。

百科:對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,當追求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。另外,演算法的所有效能之間都存在著或多或少的相互影響。因此,當設計乙個演算法(特別是大型演算法)時,要綜合考慮演算法的各項效能,演算法的使用頻率,演算法處理的資料量的大小,演算法描述語言的特性,演算法執行的機器系統環境等各方面因素,才能夠設計出比較好的演算法。演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。

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

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

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

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

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

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