真正統治世界的十大算法

不久前的某一天,我在瀏覽Reddit發現了一篇有趣的文章《統治世界的十大算法》,做者George Dvorsky在那篇文章中試圖解釋算法之於當今世界的重要性,以及哪些算法對人類文明最爲重要。算法

此時此刻,若是你已經學過算法的話,那麼在你閱讀那篇文章時,你腦海中所浮現的第一件事也許是「做者是否明白算法是什麼?」或是「Facebook的新聞提要是一種算法?」,由於若是Facebook的新聞提要也算是一種算法的話,那麼最終你能夠把幾乎全部的東西都歸類爲算法。所以,在本文中我會試着去解釋什麼是算法,以及哪十個(也許更多)算法是真正統治世界的。數據庫

什麼是算法?

直白地說,算法就是任何明肯定義的計算過程,它接收一些值或集合做爲輸入,併產生一些值或集合做爲輸出。這樣,算法就是將輸入轉換爲輸出的一系列計算過程。來源:Thomas H. Cormen, Chales E. Leiserson (2009), 《算法導論第三版》。segmentfault

簡而言之,咱們能夠說算法就是用來解決一個特定任務的一系列步驟(是的,不止計算機在使用算法,人類也一樣如此)。目前,一個有效的算法應該含有三個重要特性:數組

  1. 它必須是有限的:若是你設計的算法永無休止地嘗試解決問題,那麼它是無用的。
  2. 它必須具有明肯定義的指令:算法的每一步都必須準肯定義,在任何場景下指令都應當沒有歧義。
  3. 它必須是有效的:一個算法被設計用以解決某個問題,那麼它就應當能解決這個問題,而且僅僅使用紙和筆就能證實該算法是收斂的。

還有一個要點須要指出,算法不只僅在計算機科學中使用,同時也存在於數學領域中。事實上,首個被記載的數學算法要追溯到公元前1600年,古巴比倫人開發了已知最先的算法,用做因式分解和計算平方根。這裏,咱們回答了前面所提到的那篇文章中的第一個問題,它認爲算法是計算機範疇的實體,但若是你知曉算法這個詞的真正內涵的話,真正統治世界的十大算法也能在數學書籍中找到(加法、減法、乘積等等)。瀏覽器

不過在這篇文章中,讓咱們將算法的定義限定在計算機算法上,因此剩下的問題是:哪十個算法統治了世界?在此我整理了一個小型列表,排名不分前後。安全

1. 歸併排序,快速排序和堆排序

請輸入圖片描述

哪一個排序算法最好?這取決於你的需求,這也是爲何我要將這三個使用頻率較高的排序算法置於一處的緣由。可能你比較偏心其中一個,但它們都是同等重要的。服務器

歸併排序算法是目前爲止咱們擁有的最重要的算法之一。它是一種基於比較的排序算法,使用分治法解決那些本來複雜度爲O(N^2)的問題。歸併排序是由數學家John von Neumann於1945年發明的。網絡

快速排序是解決排序問題的另外一種途徑,它使用就地分解算法,同時它也是一種分治算法。這個算法的問題在於它是不穩定的排序算法,但它在基於內存的數組排序上確實很是高效。dom

最後,堆排序算法使用一個優先隊列下降數據的查找時間,它也是一種就地排序算法,一樣也是不穩定的排序算法。機器學習

相較於曾經使用的其餘排序算法(如冒泡排序),上述算法帶來了顯著的改進。事實上,多虧了它們,今天咱們纔有了數據挖掘、人工智能、連接分析,以及世界上大部分的計算機工具,也包括網絡在內。

2. 傅立葉變換與快速傅立葉變換

請輸入圖片描述

整個數字世界都在使用這些簡單而又強大的算法,將信號從頻域轉換爲時域,反之亦然。事實上,正是歸功於這些算法,你才能看到這篇文章。

互聯網、你的WIFI、智能手機、電話、計算機、路由器、衛星,幾乎全部內置計算機的東西都會以各類方式使用這些算法實現各自的功能。若是你沒有學習這些重要的算法,你將沒法得到電子、計算機或通訊方面的學位。

3. 迪傑斯特拉(Dijkstra)算法

請輸入圖片描述

毫無不誇張地說,若是沒有這個算法,當今互聯網將沒法有效工做。這是一種圖搜索算法,它被普遍應用在可以建模爲圖的問題中,用以找出兩個節點之間的最短路徑。

目前,即使咱們已經擁有了解決最短路徑問題的更好方法,迪傑斯特拉算法依然在那些重視穩定性的系統中獲得應用。

4. RSA算法

若是沒有信息加密和網絡安全,互聯網不會像如今那麼重要。你能夠認爲「安全問題理所固然應該是美國國家安全局和其餘情報機構的事情」或「你認爲你身處在互聯網是安全的,這太天真了」。可是,人們須要在他們花錢時保有安全感,畢竟你不會在網絡服務器上輸入你的信用卡號,若是你知道它是不安全的話。

在信息加密領域,有一個算法始終是世界上最重要的算法之一,它就是RSA算法。這個算法是由RSA公司的創始人所創建的,它使信息加密惠及千家萬戶,奠基了當今信息加密的運做基礎。RSA算法用來解決一個簡單而又複雜的問題:怎樣在不一樣平臺和終端用戶之間共享公鑰,繼而實現信息加密(我想說明一下這個問題還沒徹底解決,我想咱們須要基於這個方向作更多工做)。

5. 安全哈希算法

準確地說,它不能稱之爲是算法,它是美國國家標準暨技術學會定義的加密散列函數族中的一員,可是這族算法對整個世界的運做相當重要。從你的應用商店,你的郵件,你的殺毒軟件,到你的瀏覽器等等,全部這些都在使用安全哈希算法,它能判斷你是否下載了你想要的東西,也能判斷你是不是中間人攻擊或網絡釣魚攻擊的受害者。

6. 整數因式分解

這是在計算機領域被大量使用的數學算法,沒有這個算法,信息加密會更不安全。該算法定義了一系列步驟,獲得將一合數分解爲更小因子的質數分解式。這被認爲是一種FNP問題,它是NP分類問題的延伸,極其難以解決。

許多加密協議(如RSA算法)都基於這樣一個原理:對大的合數做因式分解是很是困難的。若是一個算法可以快速地對任意整數進行因式分解,RSA的公鑰加密體系就會失去其安全性。

量子計算的誕生使咱們可以更容易地解決這類問題,同時它也打開了一個全新的領域,使得咱們可以利用量子世界中的特性來保證系統安全。

7. 連接分析

請輸入圖片描述

在互聯網時代,分析不一樣實體間的關係是至關重要的。從搜索引擎,社交網絡,到營銷分析工具,每一個人都在不停尋找互聯網的真正結構。

有證據顯示,連接分析是公衆心目中伴隨着最多謬見和誤解的算法之一。這裏的問題在於,有不少不一樣的方式能夠進行連接分析,也存在不少特性使這些算法看起來有細微的區別(這些區別容許該算法獨立申請專利),但它們本質上是相似的。

連接分析背後的理念很是簡單,以矩陣形式描繪出一張圖,將問題轉換爲特徵值問題。特徵值是一種很好的渠道,它有助於展示圖的結構以及每一個節點的相對重要性。該算法是由Gabriel Pinski和Francis Narin於1976年創建的。

誰在使用這個算法?Google的Page Rank算法,Facebook向你展現的新聞提要(這就是爲何Facebook的新聞提要不是算法,只是使用算法的結果而已),Google+和Facebook的好友推薦,LinkedIn的工做和聯繫人推薦,Netflix和Hulu的電影,YouTuBe的視頻,等等。雖然每一個都有不一樣的目標和參數,但它們背後的數學理念是相同的。

最後,我想說明一點,儘管看上去Google是第一家使用這類算法的公司,然而在1996年(Google以前兩年),Robin Li(李彥宏)所創建的一個小型搜索引擎「RankDex」就已經在它的網頁排名機制中使用了這項理念。後來,HyperSearch的創始人Massimo Marchiori基於各網頁之間的關係使用了另外一種網頁排名算法。(Google在它的專利中提到了這兩位創始者)

8. 比例積分微分(PID)算法

請輸入圖片描述

你是否曾經用過飛機、汽車、衛星服務或手機網絡?你是否曾經在工廠工做或是看見過機器人?若是回答是確定的,那麼你應該已經見識過這個算法了。

大致上,這個算法使用一種控制迴路反饋機制,將指望輸出信號和實際輸出信號之間的錯誤最小化。不管何處,只要你須要進行信號處理,或者你須要一套電子系統,用來自動化控制機械、液壓或熱力系統,這個算法都會有用武之地。

能夠這樣說,若是沒有這個算法,現代文明將不復存在。

9. 數據壓縮算法

要判斷哪一種數據壓縮算法最爲重要是很困難的,由於它取決於不一樣的應用環境。它們能夠應用在zip和mp3上,也能夠應用在JPEG和MPEG-2上。但衆所周知,在全部結構中這些算法都極其重要。

除了顯而易見的zip文件,在哪咱們可以找到這些算法?這張網頁就進行了數據壓縮並被下載到你本地,同時咱們還能在電子遊戲、視頻、音樂、數據存儲、雲計算、數據庫等等地方找到這些算法。能夠說,數據壓縮算法到處可見,它們使系統成本更低、效率更高。

10. 隨機數生成

1_WBYODRJUgH8h_QEPnaWS-w

如今咱們尚未一個「真正的」隨機數生成器,但咱們已經有了一些僞隨機數生成器,這夠用了。隨機數生成器的用途很是普遍,從互聯聯絡、數據加密、安全哈希算法、電子遊戲、人工智能、優化分析,到問題的初始條件、金融等等,都有它們的身影。

最後,我想強調一下,上面這個列表經供參考,它並不完整。由於在機器學習、矩陣乘法、分類化等領域也有一些算法,它們對咱們的世界一樣重要,但在這裏尚未提到。

原文:The real 10 algorithms that dominate our world by Marcos Otero
翻譯:真正統治世界的十大算法 by Justin Wu 責任編輯:SegmentFault-沙渺

相關文章
相關標籤/搜索