演算法複雜度基礎

2021-09-11 00:11:51 字數 2111 閱讀 7986

演算法進行計算的時候,儲存資料需要占用一定的空間,執行計算需要耗費一定的時間時間。演算法複雜度就是在演算法計算過程中對「空間」與「時間」的評價。

解決同乙個問題,不同演算法所有的空間和時間是不同的,這取決於演算法是如何設計的。同樣,同乙個問題,規模不同時,同乙個演算法所用的空間和時間也不同。

例如:某排序演算法為 100 個數排序和為 1000 個數排序。

所以,乙個演算法的複雜度是問題規模 n 的函式。

時間複雜度是演算法執行計算所花費的時間多少的度量,但是不同的機器計算速度不同,實際的時間很難統計,由此可以通過統計演算法執行的語句數來表示時間複雜度。

隨著問題規模 n 的增大,常數部分的影響越來越小:t(n) =2​n

3n^3

n3+4n + ​log

nlogn

logn

+4;而增長最快的項影響越來越大(n

3n^3

n3):t(n) = 2​n

3n^3

n3+ 4n + ​log

nlogn

logn

+ 4。

漸進時間複雜度只關注增長最快的項:t(n) = o(n

3n^3

n3),去除常數係數與複雜度小的項。平時說**的時間複雜度,一般指漸進時間複雜度。

n

nn^n

nn> n!n!

n!> c

nc^n

cn> n

cn^c

nc> log

cn

log_cn

logc​n

> c,log

nlogn

logn

一般表示 log

2n

log_2n

log2​n

。分析**複雜度時,可以按結構分析,再組合:

1. 常數次數

時間複雜度:o(1

)o(1)

o(1)

int a =10;

int b = a;

int n =

8;

2. 巢狀結構

迴圈次數 * 一次迭代次數,時間複雜度:o(n

)o(n)

o(n)

for

(int i =

0; i < n; i++

)

3. 多重巢狀結構

各個迴圈次數相乘,時間複雜度:o(n

2n^2

n2)

for

(int i =

0; i < n; i++

)for

(int j =

0; j < n; j++

)

4. 順序結構

各部分相加,時間複雜度:o(n

2n^2

n2)

for

(int i =

0; i < n; i++

)for

(int i =

0; i < n; i++

)

5. 迴圈次數

除法次數:n/2

n/2n/

2,時間複雜度:o(n

)o(n)

o(n)

for

(int i =

0; i < n; i = i +2)

對數次數:log

2n

log_2n

log2​n

,時間複雜度:o(l

ogn)

o(logn)

o(logn

)

for

(int i = n; i >=

0; i = i /2)

空間複雜度同樣可以用 o()

o()o(

) 來衡量,與時間複雜度分析類似,既要考慮演算法處理的資料,也要考慮輔助變數。

時間複雜度 空間複雜度 演算法基礎

1空間複雜度 演算法的空間效能分析 1 演算法的空間效能的影響因素 指令空間 由機器決定 資料空間 常量,變數占用空間 環境棧空間 2 度量方法 單個常量,變數 由機器和編譯器規定的型別儲存決定。陣列變數 所佔空間等於陣列大小乘以單個陣列元素所佔的空間。結構變數 所佔空間等於各個成員所佔空間的累加 ...

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

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間 即暫存器 資源,因此複雜度分為時間和空間複雜度 簡單來說,時間複雜...

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

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間 即暫存器 資源,因此複雜度分為時間和空間複雜度 簡單來說,時間複雜...