zz來自聖經的演算法

來源:互聯網
上載者:User

《來自聖經的證明》收集了數十個簡潔而優雅的數學證明,迅速贏得了大批數學愛好者的追捧。如果還有一本《來自聖經的演算法》,哪些演算法會列入其中呢?最近,有人在 StackExchange 上發起了提問,向網友們徵集那些來自聖經的演算法。眾人在一大堆入圍演算法中進行投票,最終得出了呼聲最高的五個演算法:

 

第五名: BFPRT 演算法

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

 

 

第四名:快速排序

    快速排序演算法是 1960 年由英國電腦科學家 C.A.R. Hoare 發明的,是一種既高效又簡潔的排序方法,現在已是學習演算法的必修內容之一。快速排序的思想並不複雜,妙就妙在那個線性資料分割過程,而真正最牛 B 的則是對整個演算法的時間複雜度分析。我曾寫過一個快速排序平均 O(n log n) 的證明,分析過程絕對值得欣賞。

 

 

第三名:並查集

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

 

 

第二名: KMP 演算法

    KMP 演算法是一種非常有效字串匹配演算法,它告訴了人們一個有些反直覺的事實:字串匹配竟然能線上性時間裡完成!整個演算法寫成代碼不足 10 行,但其中蘊含的天才般的奇妙思想讓演算法初學者們望而卻步,而它的複雜度分析則更是堪稱經典。

 

 

第一名:輾轉相除法

    輾轉相除法是 Euclid 的《幾何原本》中提到的一種尋找兩個數的最大公因數的演算法。無論是簡潔的演算法過程,還是深刻的演算法原理,抑或是巧妙的複雜度分析,都稱得上是來自聖經的演算法。而擴充的輾轉相除法則構造性地證明了,對任意整數 a 和 b ,存在一對 x 、 y 使得 ax + by = gcd(a, b) 。這一結論的普遍性和實用性讓它成為了數論中的基本定理之一,在很多數學問題中都能看到它的身影。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.