主宰全球的10大算法

Reddit有篇帖子介紹了算法對咱們如今生活的重要性,以及哪些算法對現代文明所作貢獻最大。若是對算法有所瞭解,讀這篇文章時你可能會問「做者知道算法爲什麼物嗎?」,或是「Facebook的‘信息流’(News Feed)算是一種算法嗎?」,若是「信息流」是算法,那就能夠把全部事物都歸結爲一種算法。才疏學淺,結合那篇帖子,接下來我試着解釋一下算法是什麼,又是哪10個算法正在主導咱們的世界。算法

JQI6.jpg

什麼是算法?瀏覽器

簡而言之,任何定義明確的計算步驟均可稱爲算法,接受一個或一組值爲輸入,輸出一個或一組值。(來源:homas H. Cormen, Chales E. Leiserson 《算法導論第3版》)安全

能夠這樣理解,算法是用來解決特定問題的一系列步驟(不只計算機須要算法,咱們在平常生活中也在使用算法)。算法必須具有以下3個重要特性:網絡

[1] 有窮性。執行有限步驟後,算法必須停止。機器學習

[2] 確切性。算法的每一個步驟都必須確切定義。函數

[3] 可行性。特定算法須能夠在特定的時間內解決特定問題,工具

其實,算法雖然普遍應用在計算機領域,但卻徹底源自數學。實際上,最先的數學算法可追溯到公元前1600年-Babylonians有關求因式分解和平方根的算法。學習

那麼又是哪10個計算機算法造就了咱們今天的生活呢?請看下面的表單,排名不分前後:網站

1. 歸併排序(MERGE SORT),快速排序(QUICK SORT)和堆積排序(HEAP SORT)搜索引擎

AI7N.jpg

哪一個排序算法效率最高?這要看狀況。這也就是我把這3種算法放在一塊兒講的緣由,可能你更經常使用其中一種,不過它們各有千秋。

歸併排序算法,是目前爲止最重要的算法之一,是分治法的一個典型應用,由數學家John von Neumann於1945年發明。

快速排序算法,結合了集合劃分算法和分治算法,不是很穩定,但在處理隨機列陣(AM-based arrays)時效率至關高。

堆積排序,採用優先佇列機制,減小排序時的搜索時間,一樣不是很穩定。

與早期的排序算法相比(如冒泡算法),這些算法將排序算法提上了一個大臺階。也多虧了這些算法,纔有今天的數據發掘,人工智能,連接分析,以及大部分網頁計算工具。

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

這兩種算法簡單,但卻至關強大,整個數字世界都離不開它們,其功能是實現時間域函數與頻率域函數之間的相互轉化。能看到這篇文章,也是託這些算法的福。

因特網,WIFI,智能機,座機,電腦,路由器,衛星等幾乎全部與計算機相關的設備都或多或少與它們有關。不會這兩種算法,你根本不可能拿到電子,計算機或者通訊工程學位。(USA)

3.代克思託演算法 (Dijkstra’s algorithm)

能夠這樣說,若是沒有這種算法,因特網確定沒有如今的高效率。只要能以「圖」模型表示的問題,都能用這個算法找到「圖」中兩個節點間的最短距離。

雖然現在有不少更好的方法來解決最短路徑問題,但代克思託演算法的穩定性仍沒法取代。

4. RSA非對稱加密算法

FS6I.jpg

絕不誇張地說,若是沒有這個算法對密鑰學和網絡安全的貢獻,現在因特網的地位可能就不會如此之高。如今的網絡毫無安全感,但遇到錢相關的問題時咱們必須要保證有足夠的安全感,若是你以爲網絡不安全,確定不會傻乎乎地在網頁上輸入本身的銀行卡信息。

RSA算法,密鑰學領域最牛叉的算法之一,由RSA公司的三位創始人提出,奠基了當今的密鑰研究領域。用這個算法解決的問題簡單又複雜:保證安全的狀況下,如何在獨立平臺和用戶之間分享密鑰。

5. 哈希安全算法(Secure Hash Algorithm)

確切地說,這不是一種算法,而是一組加密哈希函數,由美國國家標準技術研究所首先提出。不管是你的應用商店,電子郵件和殺毒軟件,仍是瀏覽器等等,都使用這種算法來保證你正常下載,以及是否被「中間人攻擊」,或者「網絡釣魚」。

6. 整數質因子分解算法(Integer factorization)

這實際上是一個數學算法,不過已經普遍應用與計算機領域。若是沒有這個算法,加密信息也不會如此安全。經過一系列步驟將,它能夠將一個合成數分解成不可再分的數因子。

不少加密協議都採用了這個算法,就好比剛提到的RSA算法。

7. 連接分析算法(Link Analysis)

CNA8.jpg

在因特網時代,不一樣入口間關係的分析相當重要。從搜索引擎和社交網站,到市場分析工具,都在竭盡全力地尋找因特網的正真構造。

連接分析算法一直是這個領域最讓人費解的算法之一,實現方式不一,並且其自己的特性讓每一個實現方式的算法發生異化,不過基本原理卻很類似。

連接分析算法的機制其實很簡單:你能夠用矩陣表示一幅「圖「,造成本徵值問題。本徵值問題能夠幫助你分析這個「圖」的結構,以及每一個節點的權重。這個算法於1976年由Gabriel Pinski和Francis Narin提出。

誰會用這個算法呢?Google的網頁排名,Facebook向你發送信息流時(因此信息流不是算法,而是算法的結果),Google+和Facebook的好友推薦功能,LinkedIn的工做推薦,Youtube的視頻推薦,等等。

廣泛認爲Google是首先使用這類算法的機構,不過其實早在1996年(Google問世2年前)李彥宏就建立的「RankDex」小型搜索引擎就使用了這個思路。而Hyper Search搜索算法創建者馬西莫·馬奇奧裏也曾使用過相似的算法。這兩我的都後來都成爲了Google歷史上的傳奇人物。

8. 比例微積分算法(Proportional Integral Derivative Algorithm)

CHZ7.jpg

飛機,汽車,電視,手機,衛星,工廠和機器人等等事物中都有這個算法的身影。

簡單來說,這個算法主要是經過「控制迴路反饋機制」,減少預設輸出信號與真實輸出信號間的偏差。只要須要信號處理,或電子系統來控制自動化機械,液壓和加熱系統,都須要用到這個算個法。

沒有它,就沒有現代文明。

9. 數據壓縮算法

數據壓縮算法有不少種,哪一種最好?這要取決於應用方向,壓縮mp3,JPEG和MPEG-2文件都不同。

哪裏能見到它們?不只僅是文件夾中的壓縮文件。你正在看的這個網頁就是使用數據壓縮算法將信息下載到你的電腦上。除文字外,遊戲,視頻,音樂,數據儲存,雲計算等等都是。它讓各類系統更輕鬆,效率更高。

10. 隨機數生成算法

到現在,計算機尚未辦法生成「正真的」隨機數,但僞隨機數生成算法就足夠了。這些算法在許多領域都有應用,如網絡鏈接,加密技術,安全哈希算法,網絡遊戲,人工智能,以及問題分析中的條件初始化。

這個表單並不完整,不少與咱們密切相關的算法都沒有提到,如機器學習和矩陣乘法。另外,知識有限,若有批漏,還望指正。

相關文章
相關標籤/搜索