一些重要的算法



酷殼: http://CoolShell.cn/ 

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

下面是一些比較重要的算法,原文羅列了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)

附錄

發佈了36 篇原創文章 · 獲贊 39 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章