本文內容是個人對王爭老師極客時間《資料結構與演算法之美》的總結
空間複雜度分析
練習題總結
王爭老師的資料結構與演算法學習,每日更新學習筆記
老師的語言為c,自己使用python
由於測試結果非常依賴測試環境,測試結果手資料規模的影響很大,因此需要乙個不用具體的測試資料來測試演算法執行效率的方法,就是時間複雜度分析和空間複雜度分析。
時間複雜度表示**執行時間隨資料規模增長的變化趨勢。可以解釋說,**的執行時間t(n)與每行**的執行次數n成正比。
只關注迴圈次數最多的一段**,例如:**塊中一段**的時間複雜度為o(n),另一段**的時間複雜度為o(n^ 2),則最後這段**的時間複雜度為o(n^2).
符合加法演算法和乘法演算法。具體分析看以下**部分。
常數階o(1) :
執行常數次**
對數階o(logn)
例如下面**,此**的時間複雜度為o(log2n)。(2為底)
i=1;
while
(i <= n)
線性階o(n) :執行**次數與n有關
線性對數階o(nlogn)
平方階 o(n^2),立方階o(n ^3),k次方階o(n ^k)
指數階o(2^n)
階乘階o(n!)
以下**為c++寫的for巢狀迴圈,每執行一次為o(1)的時間複雜度,前三行的時間複雜度為o(3),每執行一次外層for迴圈,內層執行n次,時間複雜度為o(2n),外層for執行n次,時間複雜度符合加法演算法和乘法演算法,這段**的時間複雜度為o(2n^2+2n+3),只取高階項且忽略係數,最後這段**的時間複雜度為o(n ^2)。
int
cal(
int n)
}}
**如下,此時這段**的時間複雜度
// n表示陣列array的長度
intfind
(int
array,
int n,
int x)
}return pos;
}
此**中的執行次數與x的值有關,這種情況下的時間複雜度由四個量進行衡量:最好,最壞,平均,均攤時間複雜度
x出現在各位置的概率為1/(n+1),包括當陣列滿時。陣列未滿時執行次數都為1,陣列滿時執行次數為n,最後可以得到1*n/(n+1)+n/n+1=2n/(n+1),則平均時間複雜度為o(1)。
將陣列滿時執行次數n均攤到陣列未滿時執行次數為1,則均攤時間複雜度為o(1)
**中陣列,空間複雜度為陣列的空間複雜度
一維陣列:o(n)
二維陣列:o(n^2)
**中有遞迴
遞迴的深度為空間複雜度
既有遞迴又有陣列
兩者中複雜度最大的為空間複雜度
// 全域性變數,大小為10的陣列array,長度len,下標i。
int array=
newint[10
];int len =10;
int i =0;
// 往陣列中新增乙個元素
void
add(
int element)
// new_array複製給array,array現在大小就是2倍len了
array = new_array;
len =
2* len;
}// 將element放到下標為i的位置,下標i加一
array[i]
= element;
++i;
}
最好時間複雜度:o(1)
最壞時間複雜度:o(n)
平均時間複雜度:1/(n+1)+1/(n+1)+…+1/(n+1)+n/(n+1)=2n/(n+1)
,所以平均時間複雜度為o(1)
均攤時間複雜度:o(1)
空間複雜度為:o(n)
寫工程**時要計算時間複雜度和空間複雜度,注重**效率
n<=10時,各量級時間複雜度相近,n越大,各量級時間複雜度差距越大,常數階型最小,指數階型最大
當時間複雜度的與x有關時,要計算最好,最壞,平均(均攤)時間複雜度
均攤時間複雜度是一種特殊的平均時間複雜度
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...