[轉載] 陳皓:一些重要的演算法

Eastmount發表於2015-05-19

酷殼: http://CoolShell.cn/ 

原文: http://coolshell.cn/?p=2583 

PS:本文是轉載自陳皓大神的部落格,希望對你有所幫助! 

下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法。(注:本篇文章並非翻譯,其中的演算法描述大部份摘自Wikipedia,因為維基百科描述的很專業了)

  1. A*搜尋演算法
    俗稱A星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於遊戲中的NPC的移動計算,或線上遊戲的BOT的移動計算上。該演算法像Dijkstra演算法一樣,可以找到一條最短路徑;也像BFS一樣,進行啟發式的搜尋。
  2. Beam Search
    束搜尋(beam search) 方法是解決優化問題的一種啟發式方法,它是在分枝定界方法基礎上發展起來的,它使用啟發式方法估計k 個最好的路徑,僅從這k 個路徑出發向下搜尋,即每一層只有滿意的結點會被保留,其它的結點則被永久拋棄,從而比分枝定界法能大大節省執行時間。束搜尋於20 世紀70 年代中期首先被應用於人工智慧領域,1976 年Lowerre 在其稱為HARPY的語音識別系統中第一次使用了束搜尋方法,他的目標是並行地搜尋幾個潛在的最優決策路徑以減少回溯,並快速地獲得一個解。
  3. 二分取中查詢演算法
    一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
  4. Branch and bound
    分支定界 (branch and bound) 演算法是一種在問題的解空間樹上搜尋問題的解的方法。但與回溯演算法不同,分支定界演算法採用廣度優先或最小耗費優先的方法搜尋解空間樹,並且,在分支定界演算法中,每一個活結點只有一次機會成為擴充套件結點。
  5. 資料壓縮
    資料壓縮是通過減少計算機中所儲存資料或者通訊傳播中資料的冗餘度,達到增大資料密度,最終使資料的儲存空間減少的技術。資料壓縮在檔案儲存和分散式系統領域有著十分廣泛的應用。資料壓縮也代表著尺寸媒介容量的增大和網路頻寬的擴充套件。
  6. Diffie–Hellman金鑰協商
    Diffie–Hellman key exchange,簡稱“D–H”, 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起一個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。
  7. Dijkstra’s 演算法
    迪科斯徹演算法(Dijkstra)是由荷蘭電腦科學家艾茲格·迪科斯徹(Edsger Wybe Dijkstra)發明的。演算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,迪科斯徹演算法可以用來找到兩個城市之間的最短路徑。
  8. 動態規劃
    動態規劃是一種在數學和電腦科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於電腦科學和工程領域。比較著名的應用例項有:求解最短路徑問題,揹包問題專案管理網路流優化等。這裡也有一篇文章說得比較詳細。
  9. 歐幾里得演算法
    在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
  10. 最大期望(EM)演算法
    在統計計算中,最大期望(EM)演算法是在概率probabilistic)模型中尋找引數最大似然估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(Latent Variable)。最大期望經常用在機器學習計算機視覺資料聚類Data Clustering)領域。最大期望演算法經過兩個步驟交替進行計算,第一步是計算期望(E),利用對隱藏變數的現有估計值,計算其最大似然估計值;第二步是最大化(M),最大化在 E 步上求得的最大似然值來計算引數的值。M 步上找到的引數估計值被用於下一個 E 步計算中,這個過程不斷交替進行。
  11. 快速傅立葉變換 (FFT)
    快速傅立葉變換(Fast Fourier Transform,FFT),是離散傅立葉變換的快速演算法,也可用於計算離散傅立葉變換的逆變換。快速傅立葉變換有廣泛的應用,如數字訊號處理、計算大整數乘法、求解偏微分方程等等。本條目只描述各種快速演算法,對於離散傅立葉變換的性質和應用,請參見離散傅立葉變換
  12. 雜湊函式
    Hash Function是一種從任何一種資料中建立小的數字“指紋”的方法。該函式將資料打亂混合,重新建立一個叫做雜湊值的指紋。雜湊值通常用來代表一個短的隨機字母和數字組成的字串。好的雜湊函式在輸入域中很少出現雜湊衝突。在雜湊表和資料處理中,不抑制衝突來區別資料,會使得資料庫記錄更難找到。
  13. 堆排序
    Heapsort 是指利用堆積樹)這種資料結構所設計的一種排序演算法。堆積樹是一個近似完全二叉樹的結構,並同時滿足堆積屬性:即子結點的鍵值或索引總是小於(或者大於)它的父結點。
  14. 歸併排序
    Merge sort是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
  15. RANSAC 演算法
    RANSAC 是”RANdom SAmple Consensus”的縮寫。該演算法是用於從一組觀測資料中估計數學模型引數的迭代方法,由Fischler and Bolles在1981 提出,它是一種非確定性演算法,因為它只能以一定的概率得到合理的結果,隨著迭代次數的增加,這種概率是增加的。 該演算法的基本假設是觀測資料集中存在”inliers”(那些對模型引數估計起到支援作用的點)和”outliers”(不符合模型的點),並且這組觀測資料受到噪聲影響。RANSAC 假設給定一組”inliers”資料就能夠得到最優的符合這組點的模型。
  16. RSA加密演演算法
    這是一個公鑰加密演算法,也是世界上第一個適合用來做簽名的演算法。今天的RSA已經專利失效,其被廣泛地用於電子商務加密,大家都相信,只要金鑰足夠長,這個演算法就會是安全的
  17. 並查集Union-find
    並查集是一種樹型的資料結構,用於處理一些不相交集合(Disjoint Sets)的合併及查詢問題。常常在使用中以森林來表示。
  18. Viterbi algorithm
    尋找最可能的隱藏狀態序列(Finding most probable sequence of hidden states)

附錄

相關文章