一些重要的演算法

2021-09-08 15:57:58 字數 3195 閱讀 3940

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

a*搜尋演算法

俗稱a星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於遊戲中的npc的移動計算,或線上遊戲的bot的移動計算上。該演算法像dijkstra演算法一樣,可以找到一條最短路徑;也像bfs一樣,進行啟發式的搜尋。

beam search

二分取中查詢演算法

一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

branch and bound

分支定界 (branch and bound) 演算法是一種在問題的解空間樹上搜尋問題的解的方法。但與回溯演算法不同,分支定界演算法採用廣度優先或最小耗費優先的方法搜尋解空間樹,並且,在分支定界演算法中,每乙個活結點只有一次機會成為擴充套件結點。

資料壓縮

資料壓縮是通過減少計算機中所儲存資料或者通訊傳播中資料的冗餘度,達到增大資料密度,最終使資料的儲存空間減少的技術。資料壓縮在檔案儲存和分布式系統領域有著十分廣泛的應用。資料壓縮也代表著尺寸媒介容量的增大和網路頻寬的擴充套件。

diffie–hellman金鑰協商

diffie–hellman key exchange,簡稱「d–h」, 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。

dijkstra』s 演算法

迪科斯徹演算法(dijkstra)是由荷蘭計算機科學家艾茲格·迪科斯徹(edsger wybe dijkstra)發明的。演算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,迪科斯徹演算法可以用來找到兩個城市之間的最短路徑。

動態規劃

動態規劃是一種在數學和電腦科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於電腦科學和工程領域。比較著名的應用例項有:求解最短路徑問題,揹包問題,專案管理,網路流優化等。這裡也有一篇文章說得比較詳細。

歐幾里得演算法

在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第vii卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。

最大期望(em)演算法

在統計計算中,最大期望(em)演算法是在概率(probabilistic)模型中尋找引數最大似然估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(latent variable)。最大期望經常用在機器學習和計算機視覺的資料聚類(data clustering)領域。最大期望演算法經過兩個步驟交替進行計算,第一步是計算期望(e),利用對隱藏變數的現有估計值,計算其最大似然估計值;第二步是最大化(m),最大化在 e 步上求得的最大似然值來計算引數的值。m 步上找到的引數估計值被用於下乙個 e 步計算中,這個過程不斷交替進行。

快速傅利葉變換(fft)

快速傅利葉變換(fast fourier transform,fft),是離散傅利葉變換的快速演算法,也可用於計算離散傅利葉變換的逆變換。快速傅利葉變換有廣泛的應用,如數字訊號處理、計算大整數乘法、求解偏微分方程等等。本條目只描述各種快速演算法,對於離散傅利葉變換的性質和應用,請參見離散傅利葉變換。

雜湊函式

hash function是一種從任何一種資料中建立小的數字「指紋」的方法。該函式將資料打亂混合,重新建立乙個叫做雜湊值的指紋。雜湊值通常用來代表乙個短的隨機字母和數字組成的字串。好的雜湊函式在輸入域中很少出現雜湊衝突。在雜湊表和資料處理中,不抑制衝突來區別資料,會使得資料庫記錄更難找到。

堆排序

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

歸併排序

merge sort是建立在歸併操作上的一種有效的排序

演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。

ransac 演算法

ransac 是」random sample consensus」的縮寫。該演算法是用於從一組觀測資料中估計數學模型引數的迭代方法,由fischler and bolles在1981 提出,它是一種非確定性演算法,因為它只能以一定的概率得到合理的結果,隨著迭代次數的增加,這種概率是增加的。 該演算法的基本假設是觀測資料集中存在」inliers」(那些對模型引數估計起到支援作用的點)和」outliers」(不符合模型的點),並且這組觀測資料受到雜訊影響。ransac 假設給定一組」inliers」資料就能夠得到最優的符合這組點的模型。

rsa加密演演算法

這是乙個公鑰加密演算法,也是世界上第乙個適合用來做簽名的演算法。今天的rsa已經專利失效,其被廣泛地用於電子商務加密,大家都相信,只要金鑰足夠長,這個演算法就會是安全的

並查集union-find

並查集是一種樹型的資料結構,用於處理一些不相交集合(disjoint sets)的合併及查詢問題。常常在使用中以森林來表示。

viterbi algorithm

尋找最可能的隱藏狀態序列(finding most probable sequence of hidden states)

附錄

一些重要的演算法

原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文 羅 列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的 很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法...

一些重要的演算法

酷殼 http coolshell.cn 原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好...

一些重要的演算法

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