例子1
public
static
intfind
(int
array,
int n,
int x)
}return pos;
}
分析例子1的時間複雜度
例1的主要實現在for迴圈中的array[i]上。 他的時間複雜度就是來自for迴圈 所以他的時間複雜度就是o(n). n就是陣列的長度。
但是經常有時是,不需要將所有的資料遍歷一遍結束。而是可能在中途就退出,提前結束迴圈。
例如下面的例2
public
static
intfind
(int
array,
int n,
int x)
}return pos;
}
那麼上述的時間複雜度還是o(n)嗎?
那就需要分情況來講述了
1) 有可能相等條件就在陣列的第乙個。 那麼時間複雜度就是o(1)
2) 如果不存在那就需要將陣列全部遍歷 ,那麼時間複雜度就是o(n)
顧名思義,
o(1)就是最好情況時間複雜度,即最理想的情況下執行
o(n)就是最壞情況時間複雜度,即最糟糕的情況下執行
最好最壞情況時間複雜度都是在·極端·的情況下才會產生的,大部分時間使用的是平均時間複雜度。
查詢變數x在陣列中的位置,有n+1種情況及
1)在陣列中 0 ~ n-1的位置中
2)不再陣列中
.每一種情況需要遍歷的次數
1+2+3+…n+n/n+1 = 需要遍歷的元素個數的平均值
倒序相加法
省略常量,係數等等 得到平均時間複雜度o(n)
要查詢變數x,要麼在陣列裡,要麼不在陣列裡。
假設在陣列和不在陣列的概率是1/2
在0-n的概率也是一樣的為1/n
概率乘法法則 即0 ~ n-1中的任意位置的概率都是1/(2n)
(1+2+3+…n+n) *1/(2n) = 3n+1/4
上述叫做加權平均時間複雜度
最後的時間複雜度也是o(n)
最好,最壞和平均時間複雜度
在查詢成功的情況下,若待查詢的資料元素恰好是陣列的第乙個元素,則只需比較一次即可找到,這就是最好情況,t n o 1 稱最好時間複雜度。若是最後乙個元素,則要比較n次才能找到。t n o n 稱最壞時間複雜度。在查詢不成功的情況下,無論何時進行不成功的查詢都需要進行n次比較,t n o n 成功查詢...
最好 最壞 平均 均攤時間複雜度
1 最好情況時間複雜度就是,在最理想的情況下,執行這段 的時間複雜度 如在乙個陣列中,查詢變數 x 出現的位置,陣列第乙個值是變數x 2 最壞情況時間複雜度就是,在最糟糕的情況下,執行這段 的時間複雜度 如在乙個陣列中,查詢變數 x 出現的位置,陣列最後乙個值是變數x 3 最好情況時間複雜度和最壞情...
演算法 最好 最壞 平均複雜度
注 本文僅為筆記。原文 極客時間 資料結構與演算法之美 04 複雜度分析 下 最好 最壞 平均 均攤時間複雜度 略,比較容易分析。需考慮概率來計算。概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。均攤時間複雜度及對應的攤還分析法。對乙個資料結構...