1. 程式人生 > >“主宰世界”的10種演算法短評

“主宰世界”的10種演算法短評

宣告:引用請註明出處http://blog.csdn.net/lg1259156776/


下面是在網路上引起熱議的“主宰世界”的10種演算法,本文的目的是在於引入,以便後續的拓展演算法學習。

這裡寫圖片描述

  1. 歸併排序(MERGE SORT),快速排序(QUICK SORT)和堆積排序(HEAP SORT)
  2. 傅立葉變換和快速傅立葉變換
  3. 代克思託演演算法 (Dijkstra’s algorithm)
  4. RSA非對稱加密演算法
  5. 雜湊安全演算法(Secure Hash Algorithm)
  6. 整數質因子分解演算法(Integer factorization)
  7. 連結分析演算法(Link Analysis)
  8. 比例微積分演算法(Proportional Integral Derivative Algorithm)
  9. 資料壓縮演算法
  10. 隨機數生成演算法

以上加粗的條目在某種程度上是我已經涉獵過的演算法,下面主要通過對演算法的概念,以及這十大演算法的應用進行論述,引發學習的熱情。


什麼是演算法?

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

演算法必須具備如下3個重要特性:

[1] 有窮性。執行有限步驟後,演算法必須中止。
[2] 確切性。演算法的每個步驟都必須確切定義。
[3]可行性。特定演算法須可以在特定的時間內解決特定問題。

演算法雖然廣泛應用在計算機領域,但卻完全源自數學。實際上,最早的數學演算法可追溯到公元前1600年-Babylonians有關求因式分解和平方根的演算法。


十大演算法

歸併排序(MERGE SORT),快速排序(QUICK SORT)和堆積排序(HEAP SORT)

這裡寫圖片描述

這個具體演算法實現和分析我會在以後的資料結構和演算法集中營欄目中以排序專題進行總結。

與早期的排序演算法相比(如冒泡演算法),這些演算法將排序演算法提上了一個大臺階。也多虧了這些演算法,才有今天的資料探勘,人工智慧,連結分析,以及大部分網頁計算工具。


傅立葉變換和快速傅立葉變換

這兩個演算法實際上是訊號處理課程中(數字訊號處理)相關課程中最重要的內容之一,實際上就是給出了在頻率域觀測訊號的一種方法。具體演算法都已經非常成熟了,不用再進行總結。

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

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


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

這個演算法以前從來沒有聽說過。後面有進一步接觸的機會時,再進行詳細總結,下面只分析其具體的功能和應用。

可以這樣說,如果沒有這種演算法,因特網肯定沒有現在的高效率。只要能以“圖”模型表示的問題,都能用這個演算法找到“圖”中兩個節點間的最短距離。

雖然如今有很多更好的方法來解決最短路徑問題,但代克思託演演算法的穩定性仍無法取代。

從上面引用的內容可以看出,實際上該演算法是解決圖中的最短路徑問題,讓我聯想到了TSP(旅行商問題),我知道的方法是可以採用玻爾茲曼機來解決(採用模擬退火)。


RSA非對稱加密演算法

這個內容在我的博文《數學之美》的談談密碼學中有對這種演算法的介紹,具體的內容可以參考該博文。

毫不誇張地說,如果沒有這個演算法對金鑰學和網路安全的貢獻,如今因特網的地位可能就不會如此之高。現在的網路毫無安全感,但遇到錢相關的問題時我們必需要保證有足夠的安全感,如果你覺得網路不安全,肯定不會傻乎乎地在網頁上輸入自己的銀行卡資訊。

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


雜湊安全演算法(Secure Hash Algorithm)

該演算法沒聽說過,不過類似的內容還是有所瞭解的,對於雜湊這種資料結構,或者說查詢表,散列表,在我的博文《 散列表》中有著詳細的論述。

確切地說,這不是一種演算法,而是一組加密雜湊函式,由美國國家標準技術研究所首先提出。無論是你的應用商店,電子郵件和防毒軟體,還是瀏覽器等等,都使用這種演算法來保證你正常下載,以及是否被“中間人攻擊”,或者“網路釣魚”。


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

這個似乎是用來解謎用的,在密碼學中有著重要的作用。RSA加密演算法就是用到了大的整數因子分解。

這其實是一個數學演算法,不過已經廣泛應用與計算機領域。如果沒有這個演算法,加密資訊也不會如此安全。通過一系列步驟將,它可以將一個合成數分解成不可再分的數因子。


這裡寫圖片描述

這個演算法沒聽說過,但是感覺像是在網際網路上應用。

在因特網時代,不同入口間關係的分析至關重要。從搜尋引擎和社交網站,到市場分析工具,都在不遺餘力地尋找因特網的真正構造。

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

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

誰會用這個演算法呢?Google的網頁排名,Facebook向你傳送資訊流時(所以資訊流不是演算法,而是演算法的結果),Google+和Facebook的好友推薦功能,LinkedIn的工作推薦,Youtube的視訊推薦,等等。

普遍認為Google是首先使用這類演算法的機構,不過其實早在1996年(Google問世2年前)李彥巨集就建立的“RankDex”小型搜尋引擎就使用了這個思路。而Hyper Search搜尋演算法建立者馬西莫·馬奇奧裡也曾使用過類似的演算法。這兩個人都後來都成為了Google歷史上的傳奇人物。


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

這個演算法可能是自動控制理論的基礎,是自動化領域的必不可少的一個基礎演算法。具體的內容,以及其基礎的改進演算法可以參看我的一篇博文《經典PID控制及應用體會總結》。

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

簡單來講,這個演算法主要是通過“控制迴路反饋機制”,減小預設輸出訊號與真實輸出訊號間的誤差。只要需要訊號處理,或電子系統來控制自動化機械,液壓和加熱系統,都需要用到這個算個法。

沒有它,就沒有現代文明


資料壓縮演算法

資料壓縮是一個非常熱門的領域,前幾年火熱的稀疏分解,壓縮感知,再早一些的小波變換,餘弦變換等,都是非常經典的資料壓縮方法。

資料壓縮演算法有很多種,哪種最好?這要取決於應用方向,壓縮mp3,JPEG和MPEG-2檔案都不一樣。
哪裡能見到它們?不僅僅是資料夾中的壓縮檔案。你正在看的這個網頁就是使用資料壓縮演算法將資訊下載到你的電腦上。除文字外,遊戲,視訊,音樂,資料儲存,雲端計算等等都是。它讓各種系統更輕鬆,效率更高。


隨機數生成演算法

隨機數的應用簡直是無處不在,在密碼學中設計的密碼最希望的就是完全隨機數,而在最大熵模型中,就輸白噪聲、隨機數的熵最大,最混亂無序。所以,隨機數生成演算法是非常重要的。當然都是偽隨機數發生器。對於隨機數發生,生成具有高斯分佈的隨機數,可以參考我的博文《如何模擬高斯分佈的隨機數發生器?》。後續將會總結matlab中的隨機數發生函式的應用,以及蒙特卡洛方法等。

到如今,計算機還沒有辦法生成“正真的”隨機數,但偽隨機數生成演算法就足夠了。這些演算法在許多領域都有應用,如網路連線,加密技術,安全雜湊演算法,網路遊戲,人工智慧,以及問題分析中的條件初始化。


實際上,以上十大演算法算是比較早的總結了,很多現在應用非常廣、作用深遠的機器學習、人工智慧演算法都沒有包囊進去。不過以上演算法也都是非常經典,值得揣摩的。


引用內容摘自:
http://jandan.net/2014/05/31/10-algorithms.html

2015-9-22 藝少