注:本文僅為筆記。
極客時間 - 資料結構與演算法之美 - 04 | 複雜度分析(下):淺析最好、最壞、平均、均攤時間複雜度
最好、最壞時間複雜度
略,比較容易分析。
平均時間複雜度
需考慮概率來計算。
概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。
均攤時間複雜度
均攤時間複雜度及對應的攤還分析法。
對一個資料結構進行一組連續操作中,大部分情況下時間複雜度都很低,只有個別情況下時間複雜度比較高,而且這些操作之間存在前後連貫的時序關係,這個時候,我們就可以將這一組操作放在一塊兒分析,看是否能將較高時間複雜度那次操作的耗時,平攤到其他那些時間複雜度比較低的操作上。而且,在能夠應用均攤時間複雜度分析的場合,一般均攤時間複雜度就等於最好情況時間複雜度。
// 全域性變數,大小為 10 的陣列 array,長度 len,下標 i。
int array[] = new int[10];
int len = 10;
int i = 0;
// 往陣列中新增一個元素
void add(int element) {
if (i >= len) { // 陣列空間不夠了
// 重新申請一個 2 倍大小的陣列空間
int new_array[] = new int[len*2];
// 把原來 array 陣列中的資料依次 copy 到 new_array
for (int j = 0; j < len; ++j) {
new_array[j] = array[j];
}
// new_array 複製給 array,array 現在大小就是 2 倍 len 了
array = new_array;
len = 2 * len;
}
// 將 element 放到下標為 i 的位置,下標 i 加一
array[i] = element;
++i;
}