資料結構與演算法之美-02複雜度分析(下)

cjxggg發表於2020-12-28

複雜度分析(下):淺析最好、最壞、平均、均攤時間複雜度


1.最好情況時間複雜度
最理想情況下,執行這段程式碼的時間複雜度,比如再陣列中查詢某個元素,剛好是陣列的第一個元素的情況。


2.最壞情況時間複雜度

最糟糕的情況下,執行這段程式碼的複雜度。假如查詢陣列中某個元素,而這個元素並不存在的情況下


3.平均情況時間複雜度
加權平均時間複雜度


4.平均情況時間複雜度
一種特殊請款下的平均情況時間複雜度


課後思考

分析一下這個add()函式的時間複雜度


// 全域性變數,大小為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;
}

|
|
|
|
|
|
|
最好O(1) 最壞 O(n) 平均O(1) 期望O(1) 均攤O(1)

相關文章