演算法進行計算的時候,儲存資料需要占用一定的空間,執行計算需要耗費一定的時間時間。演算法複雜度就是在演算法計算過程中對「空間」與「時間」的評價。
解決同乙個問題,不同演算法所有的空間和時間是不同的,這取決於演算法是如何設計的。同樣,同乙個問題,規模不同時,同乙個演算法所用的空間和時間也不同。
例如:某排序演算法為 100 個數排序和為 1000 個數排序。
所以,乙個演算法的複雜度是問題規模 n 的函式。
時間複雜度是演算法執行計算所花費的時間多少的度量,但是不同的機器計算速度不同,實際的時間很難統計,由此可以通過統計演算法執行的語句數來表示時間複雜度。
隨著問題規模 n 的增大,常數部分的影響越來越小:t(n) =2n
3n^3
n3+4n + log
nlogn
logn
+4;而增長最快的項影響越來越大(n
3n^3
n3):t(n) = 2n
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
logcn
> c,log
nlogn
logn
一般表示 log
2n
log_2n
log2n
。分析**複雜度時,可以按結構分析,再組合:
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
log2n
,時間複雜度:o(l
ogn)
o(logn)
o(logn
)
for
(int i = n; i >=
0; i = i /2)
空間複雜度同樣可以用 o()
o()o(
) 來衡量,與時間複雜度分析類似,既要考慮演算法處理的資料,也要考慮輔助變數。
時間複雜度 空間複雜度 演算法基礎
1空間複雜度 演算法的空間效能分析 1 演算法的空間效能的影響因素 指令空間 由機器決定 資料空間 常量,變數占用空間 環境棧空間 2 度量方法 單個常量,變數 由機器和編譯器規定的型別儲存決定。陣列變數 所佔空間等於陣列大小乘以單個陣列元素所佔的空間。結構變數 所佔空間等於各個成員所佔空間的累加 ...
演算法基礎 時間複雜度和空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間 即暫存器 資源,因此複雜度分為時間和空間複雜度 簡單來說,時間複雜...
演算法基礎 時間複雜度和空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間 即暫存器 資源,因此複雜度分為時間和空間複雜度 簡單來說,時間複雜...