複雜度分析

2021-09-18 17:38:50 字數 1087 閱讀 9141

1、最好情況時間複雜度:在最理想的情況下,執行這段**的時間複雜度。

2、最壞情況時間複雜度:在最糟糕的情況下,執行這段**的時間複雜度。

3、平均情況時間複雜度:**在所有情況下執行的次數的加權平均值。

4、均攤情況時間複雜度:平均情況時間複雜度的一種特殊情況。

// 全域性變數,大小為 10 的陣列 array,長度 len,下標 i。

int array = new int[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)

當i < len時,只需要直接插入陣列就行。

最壞情況時間複雜度:o(n)

當i>=len,即i=n時,需要進行一次陣列賦值,所以時間複雜度為o(n)。

平均情況時間複雜度:o(1)

資料插入陣列分兩種情況,一種直接插入,一種需要擴容後再插入。規律:(n是陣列當前的容量)在插入n次資料之後,需要擴容一次,

1*(1/(n+1))+1*(1/(n+1))+ ...+n*(1/(n+1)) = 2n/(n+1)=o(1)  所以加權平均時間複雜度為o(1)
均攤情況時間複雜度:o(1)

前n次插入,都是時間複雜度為o(1),第n次插入資料後,才擴容一次,時間複雜度為o(n),可以將這n次插入均攤到不需要擴容的前n次插入,也就是o(1)。

同一段**,在不同的輸入的情況下,複雜度量級有可能是不一樣的。在引入這幾個概念後,我們可以更加全面地表示一段**的執行效率。

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...