一般的,對於演算法來說,重點關注的是對演算法的時間和空間度量,也就是時間複雜度和空間複雜度。
演算法所需要的時間與輸入的規模同步增長的,而時間複雜度就是衡量演算法執行的基本運算元的乙個函式。
對於插入排序來說,當需要排列的陣列分別為順序排列和逆序排列時,演算法的時間複雜度是不一樣的。
根據演算法執行的每一步,每一步所執行的次數,得出乙個時間衡量函式。
順序排列:t(n)=an+b,為n
的線性函式
逆序排列:t(n)=an^2+bn+c,為n
的二次函式
上述分別為最佳情況和最差情況,一般考察演算法的最差執行時間!一般的,平均情況下的執行時間一般與最差情況一樣差!
當比較不同演算法的效率時,如果乙個演算法的最壞情況執行時間比另乙個演算法的低,其效率認為更高。
課後習題:
1.因為當n
很大時,可以忽略低階項的影響。
2.選擇排序偽**
input
:a[a1,a2,…,an]
output: sorted a
for i = 1:n-1
forj = i+1:n
find min of a[i:n]
enda[i] <--> a[min]
end迴圈不等式,我們選擇
a[1,i-1]
為已經排好序的陣列,而剩餘的元素比這些元素大,滿足迴圈不等式。只迴圈
n-1是因為剩餘的第
n個元素已經是最大的!
當所有元素按照公升序排序時,
該演算法按照降序排序也一樣
因此捨去低階項,該演算法的時間複雜度可以記為:3.
當查詢陣列中元素的可能性相等時,平均和最壞情況下都滿足
線性搜尋4.
比較合理的輸入使得演算法可以有最佳執行時間
演算法導論學習筆記(2)
big o notation 模擬為小於等於 n2 o n o n2 big omega notation 模擬為 大於等於 模擬為等於 嚴格符號 小o與小 模擬為小於和大於 解遞迴方法 1 替換法 guess the form,verify by induction,solve the const...
演算法導論學習 線段樹 2
線段樹 1 1.線段樹應用之動態點插與統計 如上圖所示,我們最後統計的時候是找出cover不為零的節點,再上圖對應的是節點 3,4 5,6 2 4 5 7 但是注意到 3,4 和 4 還有 5,6 和 5 不能從重複統計,所以最後統計的長度是 2 3,4 5,6 7 6.所以四根木條在牆上的總投影長...
演算法導論學習筆記 2 歸併排序
今天學習了演算法導論上的歸併排序演算法,並且完成了在紙上寫出偽 以前就學過歸併但是理解的不夠透徹,以前還一直困惑 為什麼明明歸併排序比快排的時間複雜度更穩定,為什麼庫函式不用歸併而用快排,現在知道原因了,因為歸併排序必須開額外的空間,而且空間開銷還比較大,下面介紹演算法 首先,歸併排序用到了分治的思...