偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

當今世界最受人們重視的十大經典算法

開發(fā) 后端 算法
最近,有人在StackExchange上發(fā)起了提問,向網(wǎng)友們征集當今世界最為經典的十大算法。眾人在一大堆入圍算法中進行投票,最終得出了呼聲最高的以下十個算法。

當今世界,已經被發(fā)現(xiàn)或創(chuàng)造的經典算法數(shù)不勝數(shù)。如果,一定要投票選出你最看重的十大算法,你會作何選擇列?

最近,有人在StackExchange上發(fā)起了提問,向網(wǎng)友們征集當今世界最為經典的十大算法。眾人在一大堆入圍算法中進行投票,最終得出了呼聲***的以下十個算法。

來自圣經的十大算法:

發(fā)起人的描述:《來自圣經的證明》收集了數(shù)十個簡潔而優(yōu)雅的數(shù)學證明,迅速贏得了大批數(shù)學愛好者的追捧。如果還有一本《來自圣經的算法》,哪些算法會列入其中呢?現(xiàn)在,朋友們,以下是數(shù)十種候選算法,如果你覺得它是當今世界最經典的算法,就請您為它投一票.....

最終產生了下面得票數(shù)***的十大經典算法:

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

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

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

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

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

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

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

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

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

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

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

它們是許多其他算法的基礎。關于深度、廣度優(yōu)先搜索算法的具體介紹,請參考此文:教你通透徹底理解:BFS和DFS優(yōu)先搜索算法。

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

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

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

關于此算法的介紹,可參考我寫的此文:幾個最短路徑算法比較

d[]: 二維數(shù)組. d[i,j]最小花費、或最短路徑的鄰邊。

  1. for k from 1 to n:  
  2. for i from 1 to n:  
  3. for j from 1 to n:  
  4. d[i,j] = min(d[i,j], d[i,k] + d[k,j]) 

第四名:Quicksort(快速排序)

快速排序算法幾乎涵蓋了所有經典算法的所有榜單。它曾獲選二十世紀最偉大的十大算法(參考這:細數(shù)二十世紀最偉大的10大算法)。關于快速排序算法的具體介紹,請參考我寫的這篇文章:一之續(xù)、快速排序算法的深入分析。

第三名:BFPRT 算法

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

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

類似快排中的分割算法:

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

若大的話,則再次遞歸劃分array[s..n],

小的話,就遞歸array[left...s-1] //s為中間樞紐點元素。

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

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

各位可參考在:算法導論上,第九章中,以期望線性時間做選擇,一節(jié)中,

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

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

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

***名:Union-find

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

補充:前三名的投票數(shù),只相差4票,8票。所以這個排名日后還會不斷有所變化。但不管最終結果怎樣,這前十名的算法已經基本敲定了。

怎么樣,上文那些算法,你是否熟悉?如果,現(xiàn)在,我給你一個投票權,你會把票投給哪一個算法列?ok,咱們也來一次投票吧,請把你的意見,決定權寫在本文下面的評論里。

原文鏈接:http://www.itrenjia.org/chengxuyuan/home-space-uid-5-do-blog-id-3761.html

【編輯推薦】

  1. 淺談C/C++中的static和extern關鍵字
  2. C++ Virtual詳解
  3. C++中的指針用法匯集
  4. 老程序員10年技術生涯的思考 從C++到Java
責任編輯:于鐵 來源: IT人家
相關推薦

2011-03-10 10:45:05

算法

2023-08-03 16:04:49

2022-10-12 09:40:51

開源代碼

2017-07-17 09:04:09

2017-10-09 06:23:43

2021-10-31 07:38:37

排序算法代碼

2016-01-29 11:00:55

數(shù)據(jù)挖掘算法大數(shù)據(jù)

2017-07-18 10:50:38

前端JavaScript排序算法

2013-02-25 09:46:35

數(shù)據(jù)挖掘算法ICDM

2022-03-10 12:03:33

Python算法代碼

2011-01-26 09:14:43

數(shù)據(jù)挖掘

2010-08-31 14:01:48

CSS

2018-11-14 09:40:05

排序算法Java編程語言

2022-04-08 18:20:43

人臉識別面部識別生物識別

2017-05-10 20:57:32

2021-11-08 15:12:48

排序算法面試

2019-08-28 11:08:51

排序算法Java

2025-04-08 01:11:00

算法FFT排序

2018-10-27 15:47:35

CART算法決策樹

2020-07-09 10:57:05

原生云云計算
點贊
收藏

51CTO技術棧公眾號