成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

28個不得不看的經典編程算法

移動開發 算法
發起人的描述:《來自圣經的證明》收集了數十個簡潔而優雅的數學證明,迅速贏得了大批數學愛好者的追捧。如果還有一本《來自圣經的算法》,哪些算法會列入其中呢?

前十個是來自圣經的十大算法:

發起人的描述:《來自圣經的證明》收集了數十個簡潔而優雅的數學證明,迅速贏得了大批數學愛好者的追捧。如果還有一本《來自圣經的算法》,哪些算法會列入其中呢?

***名:Union-find

嚴格地說,并查集是一種數據結構,它專門用來處理集合的合并操作和查詢操作。并查集巧妙地借用了樹結構,使得編程復雜度降低到了令人難以置信的地步;用上 一些遞歸技巧后,各種操作幾乎都能用兩行代碼搞定。而路徑壓縮的好主意,更是整個數據結構的畫龍點睛之筆。并查集的效率極高,單次操作的時間復雜度幾乎可 以看作是常數級別;但由于數據結構的實際行為難以預測,精確的時間復雜度分析需要用到不少高深的技巧。

第二名:Knuth-Morris-Pratt字符串匹配算法

關于此算法的介紹,請參考此文:教你從頭到尾徹底理解KMP算法。KMP算法曾經落選于二十世紀最偉大的十大算法,但人們顯然不能接受,如此漂亮、高效的KMP算法竟然會落選。所以,此次最終投票產出生,KMP算法排到了第二名。

第三名:BFPRT 算法

1973 年,Blum、Floyd、Pratt、Rivest、Tarjan集體出動,合寫了一篇題為 “Time bounds for selection” 的論文,給出了一種在數組中選出第 k 大元素的算法,俗稱"中位數之中位數算法"。依靠一種精心設計的 pivot 選取方法,該算法從理論上保證了最壞情形下的線性時間復雜度,打敗了平均線性、最壞 O(n^2) 復雜度的傳統算法。一群大牛把遞歸算法的復雜度分析玩弄于骨掌股掌之間,構造出了一個當之無愧的來自圣經的算法。

我在這里簡單介紹下在數組中選出第k大元素的時間復雜度為O(N)的算法:

類似快排中的分割算法:

每次分割后都能返回樞紐點在數組中的位置s,然后比較s與k的大小

若大的話,則再次遞歸劃分array,

小的話,就遞歸array //s為中間樞紐點元素。

否則返回array,就是partition中返回的值。 //就是要找到這個s。

找到符合要求的s值后,再遍歷輸出比s小的那一邊的元素。

我找到了這個 尋找數組中第k小的元素的,平均時間復雜度為O(N)的證明:上述程序的期望運行時間,***證明可得O(n),且假定元素是不同的。

第四名:Quicksort(快速排序)

快速排序算法幾乎涵蓋了所有經典算法的所有榜單。它曾獲選二十世紀最偉大的十大算法。

第五名:Floyd-Warshall all-pairs最短路徑算法

關于此算法的介紹,可參考我寫的此文:幾個最短路徑算法比較(http://blog.csdn.net/v_JULY_v/archive/2011/02/12/6181485.aspx)。

d: 二維數組. d最小花費、或最短路徑的鄰邊。

for k from 1 to n:

for i from 1 to n:

for j from 1 to n:

d = min(d, d + d)

第六名:Gentry's Fully Homomorphic Encryption Scheme(紳士完全同態加密機制)算法

此算法很漂亮,它允許第三方執行任意加密數據運算得不到私鑰(不是很了解)。

第七名:Depth First Search、Breadth First Search(深度、廣度優先搜索)

它們是許多其他算法的基礎。

第八名:Miller-Rabin作的類似的試驗測試

這個想法是利用素數的性質(如使用費馬大定理)的小概率尋找見證不數素數。如果沒有證據是足夠的隨機檢驗后發現,這一數字為素數。

第九名:Binary Search (二分查找)

在一個有序的集合中查找元素,可以使用二分查找算法,也叫二分搜索。二分查找算法先比較位于集合中間位置的元素與鍵的大小,有三種情況(假設集合是從小到大排列的):

1.鍵小于中間位置的元素,則匹配元素必在左邊(如果有的話),于是對左邊的區域應用二分搜索。

2.鍵等于中間位置的元素,所以元素找到。

3.鍵大于中間位置的元素,則匹配元素必在右邊(如果有的話),于是對右邊的區域應用二分搜索。

另外,當集合為空,則代表找不到。

第十名:Huffman coding(霍夫曼編碼)

霍夫曼編碼(Huffman Coding)是一種編碼方式,是一種用于無損數據壓縮的熵編碼(權編碼)算法。1952年,David A. Huffman在麻省理工攻讀博士時所發明的,并發表于《一種構建極小多余編碼的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。

十一、Cooley-Tukey FFT算法。快速傅里葉變換算法。

十二、linear programming,線性規劃。

十三、Dijkstra 算法。

與上第五一樣,又一種最短路徑算法。

十四、Merge Sort。

歸并排序。

十五、Ford–Fulkerson算法。

網絡***流算法。

十六、輾轉相除法。

在數學中,輾轉相除法,又稱歐幾里得算法,是求***公約數的算法,即求兩個正整數之***公因子的算法。此算法作為TAOCP***個算法被闡述,足見此算 法被重視的程度。它是已知最古老的算法, 其可追溯至3000年前。輾轉相除法***出現于歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。擴 展的輾轉相除法則構造性地證明了,對任意整數a和b ,存在一對x、y使得 ax + by = gcd(a, b) 。

十七、RSA加密演算法。

一種加密算法,日后再做詳細介紹。

十八、遺傳算法。

十九、***期望(EM)算法。

此算法入選數據挖掘領域十大經典算法。在統計計算中,***期望(EM)算法是在概率(probabilistic)模型中尋找參數***似然估計的算法,其 中概率模型依賴于無法觀測的隱藏變量(Latent Variable)。***期望經常用在機器學習和計算機視覺的數據聚類(Data Clustering)領域。***期望算法經過兩個步驟交替進行計算,***步是計算期望(E),利用對隱藏變量的現有估計值,計算其***似然估計值;第二步是***化(M),***化在 E 步上求得的***似然值來計算參數的值。M 步上找到的參數估計值被用于下一個 E 步計算中,這個過程不斷交替進行。

二十、數據壓縮

數據壓縮是通過減少計算機中所存儲數據或者通信傳播中數據的冗余度,達到增大數據密度,最終使數據的存儲空間減少的技術。數據壓縮在文件存儲和分布式系統領域有著十分廣泛的應用。數據壓縮也代表著尺寸媒介容量的增大和網絡帶寬的擴展。

二十一、Hash函數

Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。

二十二、Dynamic Programming(動態規劃)。

二十三、堆排序算法。

堆排序算法作為一種快速穩定的算法,其平均時間復雜度(最壞也為)O(n*lgn)。當然,在實際應用中,一個實現的好的快速排序算法仍然要優于堆排序算法。不過,堆數據結構還可以作為高效的優先級隊列。

二十四、遞歸與回溯算法。

此倆個算法,相信各位比較熟悉,在此不做贅述。  

二十五、最長公共子序列

最長公共子序列,英文縮寫為LCS(Longest Common Subsequence)。其定義是,一個數列 S ,如果分別是兩個或多個已知數列的子序列,且是所有符合此條件序列中最長的,則 S 稱為已知序列的最長公共子序列。

動態規劃的一個計算最長公共子序列的方法如下:

以兩個序列 X、Y 為例子:

設有二維數組 f 表示 X 的 i 位和 Y 的 j 位之前的最長公共子序列的長度,則有:

      f = same(1,1)

      f = max{f+same(i,j),f,f}

其中,same(a,b)當 X 的第 a 位與 Y 的第 b 位完全相同時為“1”,否則為“0”。

此時,f中***的數便是 X 和 Y 的最長公共子序列的長度,依據該數組回溯,便可找出最長公共子序列。

該算法的空間、時間復雜度均為O(n2),經過優化后,空間復雜度可為O(n),時間復雜度為O(nlogn)。

二十六、紅黑樹的算法與實現

關于紅黑樹,linux內核中有實現。

二十七、A*搜尋算法。

相對于BFS、Dijkstra 等算法,A*搜尋算法作為一種高效的最短路徑搜索算法,如今,已得到日益廣泛的應用。

二十八、圖像特征提取與匹配之SIFT算法

sift,尺度不變特征轉換,是一種電腦視覺的算法用來偵測與描述影像中的局部性特征,它在空間尺度中尋找極值點,并提取出其位置、尺度、旋轉不變量,此算法由 David Lowe 在1999年所發表,2004年完善總結。

責任編輯:閆佳明 來源: emuch
相關推薦

2010-05-26 15:58:52

MySQL遠程連接

2010-05-10 13:01:03

OracleDBA面試

2010-05-21 09:40:57

MySQL出錯代碼列表

2010-05-25 09:58:43

MySQL數據庫

2010-07-23 18:39:52

SQL Server游

2010-04-21 17:19:29

Oracle創建

2019-12-10 15:30:27

SaaSIaaS云計算

2010-08-18 11:36:40

DB2簡史

2020-09-19 17:59:21

sorted()Python函數

2010-05-18 10:34:29

MySQL數據庫備份

2010-05-26 13:14:22

MySQL錯誤解決方案

2010-08-02 11:01:29

DB2 Resotre

2017-05-17 14:46:22

容器DockerLinux

2010-05-05 11:30:21

2010-08-18 15:01:08

DB2 9安裝方法

2010-09-28 09:42:16

2010-06-12 15:03:55

2010-09-29 17:36:00

管理平臺

2018-01-24 09:52:18

SQL查詢秘訣

2019-04-09 13:10:44

工業大數據互聯網工業生產
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.国产精| 欧美一区二区三区免费电影 | 精品亚洲一区二区 | 国产精品亚洲第一区在线暖暖韩国 | 国产成人精品一区 | 久久久久久国产精品久久 | 一二区视频 | 99久久99| 欧美激情一区二区三区 | 国产精品国产a级 | 日本超碰 | 国产高清在线精品一区二区三区 | 99久久精品国产毛片 | 欧美精品一二三 | 久久宗合色 | www.中文字幕.com | 精品免费国产一区二区三区四区介绍 | 久久国产精品一区二区三区 | 精品国产乱码久久久久久牛牛 | 日韩精品在线观看一区二区 | 男人的天堂avav | 国产一区久久久 | 一区二区三区在线 | 日韩精品久久久久久 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国内精品久久久久 | 成人亚洲精品久久久久软件 | 日本激情视频网 | 亚洲精久久| 成人av网站在线观看 | 成人a在线 | 欧洲精品在线观看 | 久久99精品久久久 | 99亚洲 | www.99久久.com | 四虎在线观看 | 亚洲精品久久久久中文字幕二区 | 成人av在线大片 | 亚洲精品一区中文字幕乱码 | 成人片网址| 欧美成人精品二区三区99精品 |