數學算法統治世界?
數學技術之算法概論篇(4)
②統治世界的十大算法
軟件正在統治世界,而軟件的核心是算法;互聯網即將統治世界,其管理、使用的核心也是算法;算法統治著軟件和互聯網,所以說“算法統治世界”這句話應是有一定道理的。
算法決定了你用Google搜索的結果,算法決定了新浪微博向你展示的話題,算法決定了Netflix向你推薦的電影,算法決定了你QQ對話窗彈出的橫幅廣告等等,這些都意味著“算法在統治世界”。我們花費了大量時間、巨大的投資來研究新算法,調整、改善舊算法,尋找更好的算法以便集成到應用中去,但是有些現成的算法卻罕有人知曉,最后卻是“眾里尋她千百度,那人卻在燈火闌珊處”——往往答案就在眼前,但很多別人已經研究多年的算法自己卻從未聽說過。這里,從千千萬萬算法中,整理出統治世界的十大算法的小型列表,排名不分先后,供參考。
1. 歸并排序,快速排序和堆排序
哪個排序算法最好?這取決于需求,也是為什么要將歸并排序、快速排序和堆排序算法這三個使用頻率較高的排序算法置于一處的原因。你可能比較偏愛其中的一個,但它們都是同等重要的。
歸并排序算法是目前為止我們擁有的最重要的算法之一。它是一種基于比較的排序算法,使用分治法解決那些原本復雜度為O(N 2 )的問題。歸并排序是由數學家John von Neumann于1945年提出的。
快速排序是解決排序問題的另一種途徑,它使用就地分解算法,同時它也是一種分治算法。這個算法的問題在于它是不穩定的排序算法,但它在基于內存的數組排序上確實非常高效。
最后,堆排序算法使用一個優先隊列降低數據的查找時間,它也是一種就地排序算法,同樣也是不穩定的排序算法。
相較于曾經使用的其他排序算法(如冒泡排序),上述算法帶來了顯著的改進。事實上,多虧了它們,今天我們才有了數據挖掘、人工智能、鏈接分析,以及世界上大部分的計算機工具,也包括網絡在內。
2. 傅立葉變換與快速傅立葉變換
整個數字世界都在使用這一簡單而又強大的算法,將信號從頻域轉換為時域,反之亦然。互聯網、你的WIFI、智能手機、電話、計算機、路由器、衛星,幾乎所有內置計算機的東西都會以各種方式使用這些算法實現各自的功能。
3. Dijkstra算法
毫無不夸張地說,如果沒有這個算法,當今互聯網將無法有效工作。這是一種圖搜索算法,它被廣泛應用在能夠建模為圖的問題中,用以找出兩個節點之間的最短路徑。
目前,即便我們已經擁有了解決最短路徑問題的更好方法,Dijkstra算法依然在那些重視穩定性的系統中得到應用。
4. RSA算法
如果沒有信息加密和網絡安全,互聯網不會像現在那么重要。在信息加密領域,有一個算法始終是世界上最重要的算法之一,它就是RSA算法。這個算法是由RSA公司的創始人建立,它使信息加密惠及千家萬戶,奠定了當今信息加密的運作基礎。RSA算法用來解決一個簡單而又復雜的問題:怎樣在不同平臺和終端用戶之間共享公鑰,繼而實現信息加密。其實,這個問題也沒完全解決,還需要做更多工作。
5. 安全哈希算法
準確地說,它不能稱之為算法,它是美國國家標準暨技術學會定義的加密散列函數族中的一員,但是這族算法對整個世界的運作至關重要。從你的應用商店,你的郵件,你的殺毒軟件,到你的瀏覽器等等,所有這些都在使用安全哈希算法,它能判斷你是否下載了你想要的東西,也能判斷你是否是中間人攻擊或網絡釣魚攻擊的受害者。
6. 整數因式分解
這是在計算機領域被大量使用的數學算法,沒有這個算法,信息加密會更不安全。該算法定義了一系列步驟,得到將一合數分解為更小因子的質數分解式。這被認為是一種FNP問題,它是NP分類問題的延伸,極其難以解決。
許多加密協議(如RSA算法)都基于這樣一個原理:對大的合數作因式分解是非常困難的。如果一個算法能夠快速地對任意整數進行因式分解,RSA的公鑰加密體系就會失去其安全性。
量子計算的誕生使我們能夠更容易地解決這類問題,同時它也打開了一個全新的領域,使得我們能夠利用量子世界中的特性來保證系統安全。
7. 鏈接分析
在互聯網時代,分析不同實體間的關系是相當重要的。從搜索引擎,社交網絡,到營銷分析工具,每個人都在不停尋找互聯網的真正結構。
鏈接分析背后的理念非常簡單,以矩陣形式描繪出一張圖,將問題轉換為特征值問題。特征值是一種很好的渠道,它有助于展現圖的結構以及每個節點的相對重要性。該算法是由Gabriel Pinski和Francis Narin于1976年建立的。
誰在使用這個算法?Google的Page Rank算法,非死book向你展示的新聞提要(這就是為什么非死book的新聞提要不是算法,只是使用算法的結果而已),Google 和非死book的推薦,LinkedIn的工作和聯系人推薦,Netflix和Hulu的電影,油Tube的視頻,等等。雖然每個都有不同的目標和參數,但它們背后的數學理念是相同的。
8. 比例積分微分算法
你是否曾經用過飛機、汽車、衛星服務或手機網絡?你是否曾經在工廠工作或是看見過機器人?如果回答是肯定的,那么你應該已經見識過這個算法了。
大體上,這個算法使用一種控制回路反饋機制,將期望輸出信號和實際輸出信號之間的錯誤最小化。無論何處,只要你需要進行信號處理,或者你需要一套電子系統,用來自動化控制機械、液壓或熱力系統,這個算法都會有用武之地。可以這樣說,如果沒有這個算法,現代文明將不復存在。
9. 數據壓縮算法
要判斷哪種數據壓縮算法最為重要是很困難的,因為它取決于不同的應用環境。它們可以應用在zip和mp3上,也可以應用在JPEG和MPEG-2上。但眾所周知,在所有結構中這些算法都極其重要。
除了顯而易見的zip文件,在哪我們能夠找到這些算法?在電子游戲、視頻、音樂、數據存儲、云計算、數據庫等等地方都能找到這些算法。可以說,數據壓縮算法處處可見,它們使系統成本更低、效率更高。
10. 隨機數生成
現在我們還沒有一個“真正的”隨機數生成器,但我們已經有了一些偽隨機數生成器,這就夠用了。隨機數生成器的用途非常廣泛,從互聯聯絡、數據加密、安全哈希算法、電子游戲、人工智能、優化分析,到問題的初始條件、金融等等,都有它們的身影。
最后再強調一下,上面這個列表僅供參考,它并不完整。因為在機器學習、矩陣乘法、分類化等領域也有一些算法,它們對我們的世界同樣重要,但在這里還沒有提到。
① 數學建模競賽中常用的十類算法
諸多國內參賽帶隊老師對我國多年數學建模賽賽題目進行研究分析之后,總結出如下建模競賽中常用的十大類算法,現列出供對此有興趣的網友參考。
1. 蒙特卡羅算法。
該算法又稱隨機性模擬算法,是通過計算機仿真來解決問題的算法,同時可以通過模擬來檢驗自己模型的正確性,幾乎是比賽時必用的方法。
2. 數據擬合、參數估計、插值等數據處理算法。
比賽中通常會遇到大量的數據需要處理,而處理數據的關鍵就在于這些算法,通常使用MATLAB 作為工具。
3. 線性規劃、整數規劃、多元規劃、二次規劃等規劃類算法。
建模競賽大多數問題屬于最優化問題,很多時候這些問題可以用數學規劃算法來描述,通常使用Lindo、Lingo 軟件求解。
4. 圖論算法。
這類算法可以分為很多種,包括最短路、網絡流、二分圖等算法,涉及到圖論的問題可以用這些方法解決,需要認真準備。
5. 動態規劃、回溯搜索、分治算法、分支定界等計算機算法。
這些算法是算法設計中比較常用的方法,競賽中很多場合會用到。
6. 最優化理論的三大非經典算法:模擬退火算法、神經網絡算法、遺傳算法。
這些問題是用來解決一些較困難的最優化問題的,對于有些問題非常有幫助,但是算法的實現比較困難,需慎重使用。
7. 網格算法和窮舉法。
兩者都是暴力搜索最優點的算法,在很多競賽題中有應用,當重點討論模型本身而輕視算法的時候,可以使用這種暴力方案,最好使用一些高級語言作為編程工具。
8. 一些連續數據離散化方法。
很多問題都是實際來的,數據可以是連續的,而計算機只能處理離散的數據,因此將其離散化后進行差分代替微分、求和代替積分等思想是非常重要的。
9. 數值分析算法。
如果在比賽中采用高級語言進行編程的話,那些數值分析中常用的算法比如方程組求解、矩陣運算、函數積分等算法就需要額外編寫庫函數進行調用。
10. 圖象處理算法。
賽題中有一類問題與圖形有關,即使問題與圖形無關,論文中也會需要圖片來說明問題,這些圖形如何展示以及如何處理就是需要解決的問題,通常使用MATLAB 進行處理。
來自: http://zhangjianzhong.blog.kepu.cn/20160304141436.html