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

2021-08-21 06:59:52 字數 1354 閱讀 5804

為了在函式之間建立一種相對的級別,我們通過比較其相對增長率有以下兩個定義:

如果存在正常數c和n0使得當n>=n0時t(n)<=cf(n),則記為t(n)=o(f(n))   即f(n)增長率大於等於t(n),f(n)是其上界

如果存在正常數c和n0使得當n>=n0時t(n)>=cf(n),則記為t(n)=ω(f(n))   即f(n)增長率小於等於t(n),f(n)是其下界

(1) 複雜度 

為了描述乙個演算法的優劣,我們引入演算法時間複雜度和空間複雜度的概念。 時間複雜度:乙個演算法主要運算的次數,用大 o 表示。通常表示時間複雜度時,我們只保留數量級最大的 項,並忽略該項的係數。 例如某演算法,賦值做了 3n3+n2+8 次,則認為它的時間複雜度為 o(n3);另一演算法的主要運算是比較,做 了 4×2n+2n4+700 次,則認為它的時間複雜度為 o(2n)。 當然,如果有多個字母對演算法的執行時間產生很大影響,就把它們都寫進表示式。如對 m×n 的陣列遍歷 的時間複雜度可以寫作 o(mn)。 

空間複雜度:乙個演算法主要占用的記憶體空間,也用大 o 表示。 在實際應用時,空間的占用是需要特別注意的問題。太大的陣列經常是開不出來的,即使開出來了,遍歷 的時間消耗也是驚人的。 

(2) 常用演算法的時空複雜度 

1s 運算次數約為 5,000,000。也就是說,如果把 n 代入複雜度的表示式,得數接近或大於 5,000,000, 那麼會有超時的危險。 常見的數量級大小:o(1)<o(logn)<o(n)<o(nlogn)<o(n2)<o(n3)<o(2n)<o(n!) 

數量級    能承受的大致規模            常見演算法 

o(1)        任意                               直接輸出結果 

o(logn)   任意                               二分查詢、快速冪 

o(n)        以百萬計(五六百萬)    貪心演算法、掃瞄和遍歷 

o(nlogn) 以十萬計(三四十萬)    帶有分治思想的演算法,如二分法 

o(n2)      以千計數(兩千)           列舉、動態規劃 

o(n3)      不到兩百                         動態規劃 

o(2n)      24                                  搜尋 

o(n!)       10                                  產生全排列 

o(nn)      8                                    暴力法破解密碼

o(1)叫常數時間;o(n)、o(n^2)、o(n^3)、o(n^4)……叫做多項式時間;o(2^n)、o(3^n)……叫做指數時間。

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

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

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

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

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

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