解析時間複雜度和空間複雜度

2021-10-05 00:25:25 字數 944 閱讀 7054

說明

時間複雜度和空間複雜度從字面上理解:

時間複雜度

時間複雜度的表示方法

一般用大o符號表示法表示,o(f(n)),n是影響複雜度變化的因子,f(n)是複雜度的演算法。這個表示方法不是具體的運算時間,而是**執行時間的增長變化趨勢。隨著n的增長,演算法的執行運算時間增長速度記為f(n)

常見的時間複雜度量級

總結整個時間複雜度的計算就是看變數的增大幾倍,運算時間增大的幾倍。

空間複雜度

空間複雜度以儲存空間的維度來計算,同樣的道理,隨著n的增大幾倍,f(n)佔據的空間增大幾倍。但實際我們把空間複雜度和時間複雜度放在一起談。平時分析乙個演算法優劣的主要依據的分析時間複雜度。

時間複雜度分析

時間複雜度分析的基本策略是:從內向外分析,從最深層開始分析。如果遇到函式呼叫,要深入函式進行分析。

void

afunc

(int n)

}}

o(n* 2 * 1)=o(n^2),假設n 為2,整個程式執行了3,假設n為8時,外層8次,內層迴圈從8遞減,也就是f(n)=8+7+6+5+4+3+2+1=36;

n增大了4倍,f(n)=增大了12倍,12(f(n))=4(n)*3,所以這個程式的時間複雜度為o(n * 3),遞推的話,最後可以得到o(n^2)

void afunc(int n) 

}

假設迴圈次數為 t,則迴圈條件滿足 2^t < n。所以他的時間複雜度是o(logn),

總結我們分析時間複雜度的目的不是為了精確的計算我們的程式執行次數和時間,而是能夠大約的理解我們當前的程式大約會花費多少時間,做哪些改動可以提高程式的運算速度。精確的計算出乙個程式的運算時間,以我的數學水平來說,我認為是難搞的。

目前我大約可以認定的時間複雜度:

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

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

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

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

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

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