十八個重要的演算法

2021-05-23 20:02:40 字數 3173 閱讀 3657

下面是一些比較重要的演算法,原文羅列了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),是離散傅利葉變換的快速演算法,也可用於計算離散傅利葉變換的逆變換。快速傅利葉變換有廣泛的應用,如數字訊號處理、計算大整數乘法、求解偏微分方程等等。本條目只描述各種快速演算法,對於離散傅利葉變換的性質和應用,請參見離散傅利葉變換。

雜湊函式

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

堆排序

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

歸併排序

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

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

ransac 演算法

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

rsa加密演演算法

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

並查集union-find

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

viterbi algorithm

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

附錄

十八個超級經典故事

一 去過廟的人都知道,一進廟門,首先是彌陀佛,笑臉迎客,而在他的北面,則是黑口黑臉的韋陀。但相傳在很久以前,他們並不在同乙個廟裡,而是分別掌管不同的廟。彌樂佛熱情快樂,所以來的人非常多,但他什麼都不在乎,丟三拉四,沒有好好的管理賬務,所以依然入不敷出。而韋陀雖然管賬是一把好手,但成天陰著個臉,太過嚴...

四十八個音素發音方法

1.前母音,是字母i或y在重讀閉音中的讀音。它是個短母音,故發此音要短促而輕快。發音要領的是 舌尖抵下齒,舌前部抬高,舌兩側抵上齒兩側,口形偏平。2.i 前母音,是字母ea,ee,ie或ei在單詞中的發音。此音是長母音,一定注音把音發足。其發音要領是發音時舌尖抵下齒,前舌盡量抬高 舌位高於 i 口形...

十八個生活秘訣讓男人永保青春

情歲月會侵蝕人的容貌 力量和健康,美國 男性健康 雜誌日前撰文指出,要想保持青春和延年益壽其實並不難,生活中有18個秘訣,它們就像橡皮擦一樣,至少可以將男人的年齡 擦掉 10歲。1.常用剃鬚刀,年輕5歲半。英國諾森比亞大學調查發現,刮鬍子的男人比鬍子拉碴的男人看上去年輕5.5歲。學專家肯尼思 比爾博...