計算機、數學、運籌學等領域32個重要算法

奧地利符號計算研究所(Research Institute for Symbolic Computation,簡稱RISC)的Christoph Koutschan博士在自己的頁面上發佈了一篇文章,提到他做了一個調查,參與者大多數是計算機科學家,他請這些科學家投票選出最重要的算法,以下是這次調查的結果,按照英文名稱字母順序排序。

 

1、A* 搜索算法——圖形搜索算法,從給定起點到給定終點計算出路徑。其中使用了一種啓發式的估算,爲每個節點估算通過該節點的最佳路徑,並以之爲各個地點排定次序。算法以得到的次序訪問這些節點。因此,A*搜索算法是最佳優先搜索的範例。

公式表示爲:f(n)=g(n)+h(n)

其中,f(n) 是從初始狀態經由狀態n到目標狀態的代價估計,

g(n) 是在狀態空間中從初始狀態到狀態n的實際代價,

h(n) 是從狀態n到目標狀態的最佳路徑的估計代價。

 

2、集束搜索(又名定向搜索,Beam Search)一種啓發式圖搜索算法,通常用在圖的解空間比較大的情況下,爲了減少搜索所佔用的空間和時間,在每一步深度擴展的時候,剪掉一些質量比較差的結點,保留下一些質量較高的結點。這樣減少了空間消耗,並提高了時間效率。最佳優先搜索算法的優化。使用啓發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。

 

3、二分查找(Binary Search)——在線性數組中找特定值的算法,每個步驟去掉一半不符合要求的數據。也稱折半查找(Binary Search),它是一種效率較高的查找方法。但是,折半查找要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。

 

4、分支界定算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的算法,特別是針對離散、組合的最優化。

把全部可行解空間反覆地分割爲越來越小的子集,稱爲分支;並且對每個子集內的解集計算一個目標下界(對於最小值問題),這稱爲定界。在每次分枝後,凡是界限超出已知可行解集目標值的那些子集不再進一步分枝,這樣,許多子集可不予考慮,這稱剪枝。這就是分枝定界法的主要思路。

 

5、Buchberger算法——一種數學算法,可將其視爲針對單變量最大公約數求解的歐幾里得算法和線性系統中高斯消元法的泛化。

 

6、數據壓縮——採取特定編碼方案,使用更少的字節數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。

 

7、Diffie-Hellman密鑰交換算法——一種加密協議,允許雙方在事先不瞭解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。

 

8、Dijkstra算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短算法。從一個頂點到其餘各頂點的最短路徑算法,它應用了貪心算法模式,是目前公認的較好的求解最短路徑的方法。

 

9、離散微分算法(Discrete differentiation)

f'(x)=(f(x + h)-f(xh))/2h

 

10、動態規劃算法(Dynamic Programming)——展示互相覆蓋的子問題和最優子架構算法

 

11、歐幾里得算法(Euclidean algorithm)——計算兩個整數的最大公約數。最古老的算法之一,出現在公元前300前歐幾里得的《幾何原本》。

 

12、期望-最大算法(Expectation-maximizationalgorithm,又名EM-Training)——在統計計算中,期望-最大算法在概率模型中尋找可能性最大的參數估算值,其中模型依賴於未發現的潛在變量。EM在兩個步驟中交替計算,第一步是計算期望,利用對隱藏變量的現有估計值,計算其最大可能估計值;第二步是最大化,最大化在第一步上求得的最大可能值來計算參數的值。

 

13、快速傅里葉變換(Fast Fourier transform,FFT)——計算離散的傅里葉變換(DFT)及其反轉。該算法應用範圍很廣,從數字信號處理到解決偏微分方程,到快速計算大整數乘積。

 

14、梯度下降(Gradient descent)——一種數學上的最優化算法。

梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常採用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別爲隨機梯度下降法和批量梯度下降法。

 

15、哈希算法(Hashing)

哈希是一種加密算法,也稱爲散列函數或雜湊函數。哈希函數是一個公開函數,可以將任意長度的消息M映射成爲一個長度較短且長度固定的值H(M),稱H(M)爲哈希值、散列值(Hash Value)、雜湊值或者消息摘要。它是一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。

 

16、堆排序(Heaps)

堆排序(英語:Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

 

17、Karatsuba乘法——需要完成上千位整數的乘法的系統中使用,比如計算機代數系統和大數程序庫,如果使用長乘法,速度太慢。該算法發現於1962年。

 

18、LLL算法(Lenstra-Lenstra-Lovaszlattice reduction)——以格規約(lattice)基數爲輸入,輸出短正交向量基數。LLL算法在以下公共密鑰加密方法中有大量使用:揹包加密系統(knapsack)、有特定設置的RSA加密等等。

 

19、最大流量算法(Maximum flow)——該算法試圖從一個流量網絡中找到最大的流。它優勢被定義爲找到這樣一個流的值。最大流問題可以看作更復雜的網絡流問題的特定情況。最大流與網絡中的界面有關,這就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一個流網絡中的最大流。

 

20、合併排序(Merge Sort)

  合併排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每個子序列是有序的。然後再把有序子序列合併爲整體有序序列。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲2-路歸併。合併排序也叫歸併排序。

 

21、牛頓法(Newton's method)——求非線性方程(組)零點的一種重要的迭代法。

 

22、Q-learning學習算法——這是一種通過學習動作值函數(action-value function)完成的強化學習算法,函數採取在給定狀態的給定動作,並計算出期望的效用價值,在此後遵循固定的策略。Q-leanring的優勢是,在不需要環境模型的情況下,可以對比可採納行動的期望效用。

 

23、兩次篩法(Quadratic Sieve)——現代整數因子分解算法,在實踐中,是目前已知第二快的此類算法(僅次於數域篩法Number Field Sieve)。對於110位以下的十位整數,它仍是最快的,而且都認爲它比數域篩法更簡單。

 

24、RANSAC——是“RANdom SAmple Consensus”的縮寫。該算法根據一系列觀察得到的數據,數據中包含異常值,估算一個數學模型的參數值。其基本假設是:數據包含非異化值,也就是能夠通過某些模型參數解釋的值,異化值就是那些不符合模型的數據點。

 

25、RSA——公鑰加密算法。首個適用於以簽名作爲加密的算法。RSA在電商行業中仍大規模使用,大家也相信它有足夠安全長度的公鑰。

 

26、Schönhage-Strassen算法——在數學中,Schönhage-Strassen算法是用來完成大整數的乘法的快速漸近算法。其算法複雜度爲:O(N log(N) log(log(N))),該算法使用了傅里葉變換。

 

27、單純型算法(Simplex Algorithm)——在數學的優化理論中,單純型算法是常用的技術,用來找到線性規劃問題的數值解。線性規劃問題包括在一組實變量上的一系列線性不等式組,以及一個等待最大化(或最小化)的固定線性函數。

 

28、奇異值分解(Singular value decomposition,簡稱SVD)——在線性代數中,SVD是重要的實數或複數矩陣的分解方法,在信號處理和統計中有多種應用,比如計算矩陣的僞逆矩陣(以求解最小二乘法問題)、解決超定線性系統(overdetermined linear systems)、矩陣逼近、數值天氣預報等等。

 

29、求解線性方程組(Solving a system of linear equations)——線性方程組是數學中最古老的問題,它們有很多應用,比如在數字信號處理、線性規劃中的估算和預測、數值分析中的非線性問題逼近等等。求解線性方程組,可以使用高斯—約當消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

 

30、Strukturtensor算法——應用於模式識別領域,爲所有像素找出一種計算方法,看看該像素是否處於同質區域( homogenous region),看看它是否屬於邊緣,還是是一個頂點。

 

31、合併查找算法(Union-find)——給定一組元素,該算法常常用來把這些元素分爲多個分離的、彼此不重合的組。不相交集(disjoint-set)的數據結構可以跟蹤這樣的切分方法。合併查找算法可以在此種數據結構上完成兩個有用的操作:

查找:判斷某特定元素屬於哪個組。

合併:聯合或合併兩個組爲一個組。

 

32、維特比算法(Viterbi algorithm)——尋找隱藏狀態最有可能序列的動態規劃算法,這種序列被稱爲維特比路徑,其結果是一系列可以觀察到的事件,特別是在隱藏的Markov模型中。

維特比算法是一種動態規劃算法用於尋找最有可能產生觀測事件序列的-維特比路徑-隱含狀態序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中。術語“維特比路徑”和“維特比算法”也被用於尋找觀察結果最有可能解釋相關的動態規劃算法。例如在統計句法分析中動態規劃算法可以被用於發現最可能的上下文無關的派生(解析)的字符串,有時被稱爲“維特比分析”。

 

關注公衆賬號

飛馬會

 

 

往期福利

關注飛馬會公衆號,回覆對應關鍵詞打包下載學習資料;回覆“入羣”,加入飛馬網AI、大數據、項目經理學習羣,和優秀的人一起成長!

回覆 數字“12”小白| Python+Matlab+機器學習+深度神經網絡+理論+實踐+視頻+課件+源碼,附下載!

回覆 數字“14”小白| 機器學習和深度學習必讀書籍+機器學習實戰視頻/PPT+大數據分析書籍推薦!

回覆 數字“16”100G Python從入門到精通!自學必備全套視頻教程+python經典書籍!

回覆 數字“18”526份行業報告+白皮書:AI人工智能、機器人、智能出行、智能家居、物聯網、VR/AR、 區塊鏈等(附下載)

回覆 數字“26”人工智能入門書單推薦,學習AI的請收藏好(附PDF下載)

回覆 數字“30”領取 | 100+人工智能學習、深度學習、機器學習、大數據、算法等資料,果斷收藏!

回覆 數字“31”2G谷歌機器學習25講速成課全集(中文版),限時下載

回覆 數字“35”40G 吳恩達機器學習+林軒田機器學習(基石+技法)高等數學和線性代數等視頻+書籍領取!

回覆 數字“36”286頁PDF教你如何搞明白深度學習的算法、理論與計算系統!(可下載)

回覆 數字“37”限時下載 | 265G python全套視頻教程,從入門進階到面試技巧!

資深程序員想轉行嗎?點擊“閱讀原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章