對於某些問題,一些演算法更適合於用小規模的輸入,而另一些則相反。幸運的是,在評價演算法執行效率時,我們往往可以忽略掉其處理小規模問題時的能力差異,轉而關注其在處理大規模資料時的表現。道理是顯見的,處理大規模的問題時,效率的些許差異都將對實際執行效率產生巨大的影響。這種著眼長遠,更為關注時間複雜度的總體變化趨勢和增長速度的策略和方法,即所謂的漸進分析(asymptomatic analysis)。
出於保守的估計,我們首先關注 t(
n)的漸進上界,為此引入大
o 記號。具體地,若存在正的常數
c和函式 f(
n),使得對任何
n>>
2 都有: t(
n)≤c
⋅f(n
)
則可認為在
n 足夠大之後,f(
n)給出了 t(
n)增長速度的乙個漸進上界,此時,記之為: t(
n)=o
(f(n
))由這一定義,可匯出大
o 記號的以下性質:為了對演算法的時間複雜度最好情況做出估計,需要借助另乙個記號,如果存在正的常數
c 和函式 g(
n),使得對於任何
n>>
2 都有:t(
n)≥c
⋅g(n
) 就可以認為,在
n 足夠大之後,g(
n)給出了 t(
n)的乙個漸進下界。此時我們記之為:t(
n)=ω
(g(n
))與大
o 記號恰好相反,大
ω是對演算法執行效率的樂觀估計,對於規模為
n 的任意輸入,演算法的執行時間都不低於 ω(
g(n)
)。借助大
o 記號,大
ω記號,可以對演算法的時間複雜度做出定量的界定,亦即,從漸進的趨勢看,t(
n)介於 ω(
g(n)
) 與 o(
f(n)
) 之間。若恰巧出現 g(
n)=f
(n) 的情況,則可以使用另乙個記號表示,如果存在正的常數 c1
和函式 h(
n),使得對於任何
n>>
2 ,都有,c1
⋅h(n
)≤t(
n)≤c
2⋅h(
n)就可以認為在
n 足夠大之後,h(
n)給出了 t(
n)的乙個確界,我們記之為: t(
n)=θ
(h(n
))
資料結構與演算法 複雜度分析
一 什麼是複雜度分析?1.資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2.因此需從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3.分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。4.複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...
資料結構與演算法110 複雜度分析
很多人會有疑問,複雜度分為時間和空間複雜度,現在有很多任務具監控統計執行時間和占用記憶體大小,為什麼還要去分析呢?這種測試的的結果非常依賴當時的測試環境 硬體 網速等 結果還受到資料量的影響。所以我們需要通過時間空間複雜度來估計執行的效率。int sumnumber int n return sum...
資料結構與演算法(一)複雜度分析
執行時間t n 與執行次數n成正比,即t n o f n 大o表示時間複雜度,又稱漸進時間複雜度,表徵 執行時間隨資料規模增長的變化趨勢。一定程度上可以模擬斜率 導數。1.只關注迴圈執行次數最多的 行,忽略常數 2.加法法則 總複雜度等於量級最大的那個時間複雜度 3.乘法法則 總複雜度等於巢狀的各個...