資料結構和演算法本身解決的是「快」和「省」的問題,即如何讓**執行得更快,如何讓**更省儲存空間?
1.如何理解**時間複雜度和空間複雜度。
時間複雜度:表示執行的快慢。 公式:t(n)=o(f(n)),t(n) 表示**執行的時間;n表示資料規模的大小;f(n) 表示每行**執行的次數總和
空間複雜度:表示記憶體的消耗。 公式:s(n)=o(f(n)),s(n) 表示**所需的空間:n為問題的規模,f(n)為語句關於n的所佔儲存空間
2.時間複雜度分析法則
(2.1)o(1)複雜度
int i = 8;
int j = 6;
int sum = i + j;
複雜度:o(1+1+1)->o(1)
(2.2)o(logn)複雜度
i=1;
while (i <= n)
複雜度:o(log2n)->o(logn)
(2.3)o(nlogn)複雜度
for(int i=0;i複雜度:o(nlogn)
(2.4)o(m+n)複雜度
int cal(int m, int n)
for (; j < n; ++j)
}複雜度:o(m+n)
(2.5)o(m*n)複雜度
int cal(int m, int n) }}
複雜度:o(m*n)
(2.6)o(n)複雜度
int cal(int n)
}複雜度:o(n)
3.空間複雜度分析法則
void print(int n)
}空間複雜度:o(n)
常見的空間複雜度就是 o(1)、o(n)、o(n2 ),像 o(logn)、o(nlogn) 這樣的對數階複雜度平時都用不到.
4.複雜度從下到大依次:
演算法的複雜度 時間複雜度與空間複雜度
通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...
演算法時間複雜度空間複雜度
演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...
演算法 時間複雜度 空間複雜度
1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...