演算法複雜度分析 最好 最壞 平均 均攤

2021-10-12 12:45:31 字數 1823 閱讀 5539

public int function(int n, int x)

return sum;

}

1.最壞時間複雜度當x>n時,**時間複雜度為o(n)

2.最壞時間複雜度

當x>=1時,**時間複雜度為o(1)

3.平均時間複雜度

要查詢的變數 x 在陣列中的位置,有 n+1 種情況:在陣列的 0~n-1 位置中和不在陣列中。**執行數累次數為((1+2+3....+n)+n),然後除以所有數量(n+1),就可以得到平均值

以上演算法存在問題:未考慮各自情況的發生的概率,x要麼在1~n中,不在1~n中,概率都是1/2。因為1~n中各個位置的概率都是一樣的為1/n。概率乘法法則,x在1~n中任意位置的概率是1/2n

那正確的計算方式參考以下推導過程

引入概率之後忽略係數及常量後,以上推導的最終得到加權平均時間複雜度為o(n)。

注意事項:

在大多數情況下,我們並不需要區分最好、最壞、平均情況時間複雜度三種情況。很多時候,我們使用乙個複雜度就可以滿足需求了。只有同一塊**在不同的情況下,時間複雜度有量級的差距,才會使用這三種複雜度表示法來區分。

// array表示乙個長度為n的陣列

// **中的array.length就等於n

int array = new int[n];

int count = 0;

void insert(int val)

array[0] = sum;

count = 1;

}array[count] = val;

++count;

}

均攤時間複雜度1.理想情況下count!=array.length,時間複雜度為o(1)。

2.最壞的情況下count==array.length,執行一次迴圈累加和的操作,時間複雜度為o(n)。

3.平均的情況下,因為限定條件0<=count<=array.length,count在0~array.length中存在的位置可以分為array.length+1種情況(0到n)。

4.當0<=count<array.length時,時間複雜度為o(1)。但是count==array.length的時候是乙個例外,它的複雜度是o(n)。而且這n+1種情況發生的概率都是一樣的,為1/(n+1)所以根據加權平均的計算方法,

引入概率之後忽略係數及常量後,以上推導的最終得到均攤時間複雜度為o(1)。

總結:均攤時間複雜度就是一種特殊的平均時間複雜度。當我們在分析時間複雜度是o(1)還是o(n)最簡單有效的方法就是憑感覺,如果出現o(1)的次數遠大於出現o(n)出現的次數,那麼平均平攤時間複雜度就是o(1)。

最好 最壞 平均 均攤時間複雜度

1 最好情況時間複雜度就是,在最理想的情況下,執行這段 的時間複雜度 如在乙個陣列中,查詢變數 x 出現的位置,陣列第乙個值是變數x 2 最壞情況時間複雜度就是,在最糟糕的情況下,執行這段 的時間複雜度 如在乙個陣列中,查詢變數 x 出現的位置,陣列最後乙個值是變數x 3 最好情況時間複雜度和最壞情...

時間複雜度分析 最好 最壞 均攤

array 陣列.n array長度.x 需要查詢的值 int searchposition int array,int n,int x return pos 根據上面的演算法來說的話,如果我x的位置在array 0 那麼時間複雜度就是o 1 如果x的位置在array n 1 或者不在array中....

演算法 最好 最壞 平均複雜度

注 本文僅為筆記。原文 極客時間 資料結構與演算法之美 04 複雜度分析 下 最好 最壞 平均 均攤時間複雜度 略,比較容易分析。需考慮概率來計算。概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。均攤時間複雜度及對應的攤還分析法。對乙個資料結構...