簡明易懂的演算法文章 了解漸進分析

2021-10-09 02:46:44 字數 1453 閱讀 4423

(翻譯文)

演算法的效率取決於執行演算法所需的時間、儲存和其他資源。效率是用漸近符號來衡量的。

對於不同型別的輸入,演算法可能沒有相同的效能。隨著輸入大小的增加,效能將發生變化。

研究演算法效能隨輸入大小順序的變化被定義為漸近分析。

漸進符號

漸近符號是一種數學符號,用於描述當輸入趨於某個特定值或某個極限值時演算法的執行時間。

例如:在氣泡排序中,當輸入陣列已經排序時,演算法所花費的時間是線性的,即最佳情況。但是,當輸入陣列處於反向狀態時,演算法需要最大時間(二次方)對元素進行排序,即最壞情況。

當輸入陣列既不排序也不按相反順序排序時,則需要平均時間。這個持續階段用漸近符號表示。

漸近符號主要有三種:theta表示法、omega表示法和big-o表示法。

theta表示法(θ表示法)

theta表示法從上方和下方將函式括起來。由於它代表演算法執行時間的上限和下限,所以用來分析演算法的平均情況複雜度。

上圖表示theta將函式限制在常數因子之內

對於乙個函式g(n),θ(g(n))由以下關係給出:

θ(g(n)) =
如果存在正常數c1和c2,使得它可以夾在c1g(n)和c2g(n)之間,對於足夠大的n,上述表示式可以描述為屬於集合θ(g(n))的函式f(n)。

如果乙個函式f(n)位於c1g(n)和c2>g(n)之間的任意乙個n,且n ≥ n0,則f(n)被稱為漸近緊界。

大o表示法(o表示法)

big-o表示代表演算法執行時間的上限。因此,它給出了演算法的最壞情況的複雜性。

上圖表示big-o給出函式的上限

o(g(n)) =
如果存在乙個正常數c,使得它位於0和cg(n)之間,對於足夠大的n,則上述表示式可以描述為屬於集合o(g(n))的函式f(n)。

對於n的任何乙個值,演算法的執行時間不超過o(g(n))提供的時間。

由於它給出了演算法最壞情況下的執行時間,因此它被廣泛用於分析演算法,因為我們總是對最壞情況感興趣。

ω表示法(ω表示法)

ω表示法表示演算法執行時間的下限。因此,它提供了演算法的最佳情況複雜度。

上圖表示omega給出功能的下限

ω(g(n)) =
如果存在乙個正常數c,使得它位於cg(n)之上,對於足夠大的n,上述表示式可以描述為屬於集合ω(g(n))的函式f(n)。

對於任何n值,演算法所需的最小時間由ω(g(n))給出。

參考文獻

硬核乾貨演算法文章彙總

17.持續更新.16.目標檢測演算法 第16期 yolo v2演算法結構詳解 15.目標檢測演算法 第15期 yolo v1損失函式詳解 14.目標檢測演算法 第14期 yolo v1檢測演算法詳解 13.目標檢測演算法 第13期 ssd檢測演算法必須知道的幾個關鍵點 12.目標檢測演算法 第12期...

SimHash演算法 文章相似度匹配

jieba分詞 seg jieba.cut content 去除停用詞永祥 jieba.analyse.set stop words stopwords.txt 得到前20個分詞和tf idf權值 keywords jieba.analyse.extract tags join seg topk 2...

佇列的實現 簡明易懂的方法

本文寫於本人小白入門之時,開始時舉步難行,找了不少度娘 部落格仍覺得不明確,走了許多的彎路,終於掌握了一些皮毛之見。自我總結了一些東西,個人認為是比較容易理解,以供大夥和個人學習,若有不正確之處懇請各位大神指出!佇列 queue 的結構是 先進先出 和排隊乙個道理,誰先排隊誰就輪到誰先。其實佇列和棧...