1. 程式人生 > >推薦|10本不得不看的演算法書籍,挖掘資料的靈魂!

推薦|10本不得不看的演算法書籍,挖掘資料的靈魂!

全球人工智慧:專注為AI開發者提供全球最新AI技術動態和社群交流。使用者來源包括:北大、清華、中科院、復旦、麻省理工、卡內基梅隆、斯坦福、哈佛、牛津、劍橋等世界名校的AI技術碩士、博士和教授;以及谷歌、騰訊、百度、臉譜、微軟、華為、阿里、海康威視、滴滴、英偉達等全球名企的AI開發者和AI科學家。

文章來源:雲棲社群 作者:薯條醬

我們都知道對於軟體而言,最為經典的定義就是程式=演算法+資料結構,演算法對於軟體的重要性不言而喻,甚至可以說演算法是程式的靈魂所在。甚至有人說如果計算機系只開設三門課的話,那麼一定是:離散數學、編譯原理還有演算法和資料結構。演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。其實對於IT人而言,無時無刻都沉浸在演算法之中,小到可能只是對於一個簡單的一維陣列進行排序,大到使用進行實時個性化推薦或者使用機器學習演算法預測未來的發展趨勢,這一切都是演算法。而演算法也在我們的生活中,比如我們小時候最愛舉的那個“泡茶”的例子、如何從一堆硬幣中通過天平找出假的那枚硬幣...

都說相由心生,思維也是一樣,IT人的思維往往比較縝密,因為我們的腦袋中其實執行著各種“演算法”,不知道你是否也是這樣,等電梯時總覺得它的演算法存在問題。好了,言歸正傳,演算法始源於千百年前,中國古代就有各種的演算法,比如今天我們依舊在使用的輾轉相除法等等,甚至《九章算術》其實可以稱之為一本演算法書。在茫茫的書籍的海洋中,有關演算法的書籍多不勝數,然而經歷過大浪淘沙剩下的才是經典之作,本文就為大家介紹基本演算法的相關書籍,希望能幫助大家在探索程式的靈魂之路上不斷前行。

《計算機程式設計藝術》—— 高德納 (Donald E.Knuth)

高德納,電腦科學家,演算法與程式設計技術的先驅者、斯坦福大學計算機系榮休教授、計算機排版系統TEX和METAFONT字體系統的發明人,因諸多成就以及大量富於創造力和具有深遠影響的著作而譽滿全球。

《計算機程式設計藝術》系列著作被公認為是對經典電腦科學的論述,曾在1999年被《美國科學家》期刊評選為20世紀重要的12部學術專著之一。這一巨集偉浩大的工程始於1962年,計劃出版7卷,目前已經出版了4卷。數十年來,這本書一直是廣大學生、研究人員和業內人士學習程式設計理論和實踐的無價之寶,書中各處無不體現著作者淵博的學識、嚴謹的治學態度,以及深刻的洞察力。該套書自出版以來,廣受眾多科學家的讚許,並對無數讀者產生了極其深遠的影響。《計算機程式設計藝術》堪稱電腦科學領域的瑰寶。從事研究的人驚豔於其精美優雅的分析,而普通程式設計師則一直在卓有成效地利用書中提供的各種方案解決日常問題。這些書展現了作者的博觀、清晰、幽默,所有的人都欽佩不已。高德納是演算法和程式設計領域的先驅者,對電腦科學發展史也有著深入的研究,書中在介紹眾多理論的同時,也給出了相關的歷史和發展歷程,成為本書的一大特色。

《演算法導論》—— Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, Clifford Stein

《演算法導論》是一本十分經典的計算機演算法書籍,與《計算機程式設計藝術》相媲美。該書由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作編著。本書的最大特點就是將嚴謹性和全面性融入在了一起。本書深入淺出,全面地介紹了計算機演算法。對每一個演算法的分析既易於理解又十分有趣,並保持了數學嚴謹性。本書涵蓋的內容有:演算法在計算中的作用,概率分析和隨機演算法的介紹。本書專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似演算法等,還有有關遞迴求解、快速排序中用到的劃分方法與期望線性時間順序統計演算法,以及對貪心演算法元素的討論。本書還介紹了對強連通子圖演算法正確性的證明,對哈密頓迴路和子集求和問題的NP完全性的證明等內容。《演算法導論》內容豐富,對本科生的資料結構課程和研究生的演算法課程都是很實用的教材。本書在讀者的職業生涯中,也是一本案頭的數學參考書或工程實踐手冊。大學期間,老師給我們的觀點是對於這本書可以粗略地全面概覽一遍,知道究竟有什麼樣的演算法可以解決什麼樣的問題,當遇到具體問題需要使用這些演算法時再去查詢和使用,將《演算法導論》當做一本工具書。

《演算法》—— Robert Sedgewick, Kevin Wayne

《演算法(第4版)》是Sedgewick之鉅著,與高德納TAOCP一脈相承,幾十年多次修訂,經久不衰的暢銷書,涵蓋所有程式設計師必須掌握的50種演算法。該書全面講述演算法和資料結構的必備知識,具有以下幾大特色:演算法領域的經典參考書:Sedgewick暢銷著作的最新版,反映了經過幾十年演化而成的演算法核心知識體系。內容全面:全面論述排序、搜尋、圖處理和字串處理的演算法和資料結構,涵蓋每位程式設計師應知應會的50種演算法。全新修訂的程式碼:全新的Java實現程式碼,採用模組化的程式設計風格,所有程式碼均可供讀者使用。與實際應用相結合:在重要的科學、工程和商業應用環境下探討演算法,給出了演算法的實際程式碼,而非同類著作常用的虛擬碼。富於智力趣味性:簡明扼要的內容,用豐富的視覺元素展示的示例,精心設計的程式碼,詳盡的歷史和科學背景知識,各種難度的練習,這一切都將使讀者手不釋卷。科學的方法:用合適的數學模型精確地討論演算法效能,這些模型是在真實環境中得到驗證的。與網路相結合:配套網站提供了本書內容的摘要及相關的程式碼、測試資料、程式設計練習、教學課件等資源。

《計算機演算法的設計與分析》 —— 阿霍,霍普克勞夫特,烏爾曼

《計算機演算法的設計與分析》是一部設計與分析領域的經典著作,著重介紹了計算機演算法設計領域的基本原則和根本原理。書中深入分析了一些計算機模型上的演算法,介紹了一些和設計有效演算法有關的資料結構和程式設計技術,為讀者提供了有關遞迴方法、分治方法和動態規劃方面的詳細例項和實際應用,並致力於更有效演算法的設計和開發。同時,對NP完全等問題能否有效求解進行了分析,並探索了應用啟發式演算法解決問題的途徑。另外,本書還提供了大量富有指導意義的習題。值得一提的是,本書第一作者阿霍,是哥倫比亞大學計算機科學系主管本科生教學的副主任,IEEE Fellow,美國科學與藝術學院及國家工程學院院士,曾獲得IEEE的馮·諾伊曼獎。他還是《編譯原理》(Compiler:Principles,Techniques,and Tools)的第一作者,其技術能力和影響力可想而知。

《演算法設計與分析基礎》—— Anany Levitin

《演算法設計與分析基礎》在講述演算法設計技術時採用了新的分類方法,在討論分析方法時條分縷析,形成了連貫有序、耳目一新的風格。此書涵蓋演算法入門課程的全部內容,更注重對概念(而非形式)的理解。書中通過一些流行的謎題來激發學生的興趣,幫助他們加強和提高解決演算法問題的能力。每章小結、習題提示和詳細解答,形成了非常鮮明的教學特色。作者基於豐富的教學經驗,開發了一套全新的演算法分類方法。該分類法站在通用問題求解策略的高度,對現有大多數演算法準確分類,從而引領讀者沿著一條清晰、一致、連貫的思路來探索演算法設計與分析這一迷人領域。《演算法設計與分析基礎》十分適合用作演算法設計和分析的基礎教材,也適合任何有興趣探究演算法奧祕的讀者使用,只要讀者具備資料結構和離散數學的知識即可。

《演算法圖解》—— Aditya Bhargava

《演算法圖解》是一本像小說一樣有趣的演算法入門書。演算法是解決問題的一步步流程,也是電腦科學領域的核心主題。如今程式設計師經常使用的演算法已經經過了前人的探索、檢驗及證明。如果你想搞明白這些演算法,又不想被困在繁瑣的證明中,本書正是你的不二選擇。這本圖示豐富、引人入勝的實用指南將讓你輕鬆學會如何在自己的程式中高效使用重要的演算法。這本書是大家都可以看懂的演算法基礎書,書中的程式碼示例基於Python語言,書中涵蓋400多個示意圖,生動地介紹了演算法的執行過程,並且展示了不同演算法在效能方面的優缺點,能夠幫助程式設計人員使用常見演算法解決每天面臨的實際程式設計問題。書中的前三章將幫助我們打下基礎,學習二分查詢、大O表示法、兩種基本的資料結構以及遞迴等。餘下的篇幅將主要介紹應用廣泛的演算法,具體內容包括:面對具體問題時的解決技巧,比如,何時採用貪婪演算法或動態規劃;散列表的應用;圖演算法;Kzui近鄰演算法。

《演算法神探:一部谷歌首席工程師寫的CS小說》—— 傑瑞米·庫比卡, 啊哈磊, 李嘉浩

《演算法神探:一部谷歌首席工程師寫的CS小說》這本書圍繞程式設計典型演算法,精心編織了一個扣人心絃又趣味橫生的偵探緝凶故事。小說主人公運用高超的搜尋技巧和精深的演算法知識,最終識破陰謀、緝拿元凶。其間,用二分搜尋搜查走私船、用搜索樹跟蹤間諜、用深度優先搜尋逃離監獄、用優先佇列開鎖及用優先搜尋追尋線索等跌宕起伏又富含演算法精要的情節,讓讀者在愉悅的沉浸式體驗中快速提升境界,加深對程式世界的理解。本書適合開發人員、程式設計愛好者和相關專業學生閱讀,也是少兒電腦科學啟蒙的絕佳讀物。這本書說是一本演算法書,倒不如說是一本科普書籍,可以當做一本專屬於IT人的小說來看。

《改變未來的九大演算法》—— 美 約翰.麥考密克

Google得出的搜尋結果是如何產生的?百度為何會陷入“搜尋門”,又是什麼機制使然?身處在大資料時代的我們,究竟該如何應對變化莫測的世界?……沒有滿篇的專業術語,第一次讓我們通過簡單明瞭的語言、生動的例證瞭解支撐計算機王國的靈魂支柱——9大演算法,包括人工智慧、資料壓縮,以及Google著名的PageRank等。《改變未來的九大演算法》一書精彩地介紹了搜尋引擎、PageRank、公開金鑰加密、糾錯碼、模式識別、資料壓縮、資料庫、數字簽名等內容。在解釋這些演算法的同時,作者也向我們展示了充滿科學原創精神的計算機世界:因為每一種演算法的提出不但延伸了虛擬世界的領域,同時也是人類智慧的彰顯,可以被廣泛運用於眾多領域。

在讀完本書後,你不會成為一名更加熟練的計算機使用者,但你會更珍視自己每天在所有計算裝置上不停使用的思想的美。我們每天都會進行多次搜尋查詢,但是你想過這個令人驚歎的工具是如何奏效的嗎?谷歌的精英管理層因為谷歌“以超乎尋常的技巧返回相關度極高的結果”而獲獎,他們是怎麼做到的?《改變未來的九大演算法》將帶你一探究竟。

《演算法帝國》 —— Christopher Steiner

今天,演算法涉足的領域已經遠遠超出了其創造者的預期。特別是進入資訊時代以後,演算法的應用涵蓋金融、醫療、法律、體育、娛樂、外交、文化、國家安全等諸多方面,顯現出源於人類而又超乎人類的強大威力。《演算法帝國》是《紐約時報》暢銷書作者斯坦納的又一力作,通過一個又一個引人入勝的故事,向讀者介紹了演算法掌控世界的真實情況,揭示了“機器人革命”是如何悄然在我們身邊發生的。如果說《改變未來的九大演算法》是為彌散程式設計師氣質的業餘技術控洗髓內修的白話演算法書,《演算法帝國》就是為抱負征服世界雄心的程式設計師易筋外修的演義勵志書,一路讀來心中滿盈釋然和暗合之悅。搞了小半輩子演算法,一直到聽過凱文—斯拉文(KevinSlavin)的TED演講“演算法如何塑造我們的世界”,才有意識地去感知周遭世界一行一止中演算法的開合有度。本書大開大闔,從70年代華爾街的勃興開始,以本世紀華爾街和矽谷的權力更替收尾,世界易幟,演算法仍舊。書名直譯為《演算法如何控制我們的世界》,對於潛志演算法的我們,是控制還是被控制?書尾赫然寫道:“你很有可能統治世界,如果沒有機器人搶在你前頭的話。”

《演算法帝國》適合所有對科技史、資訊革命、演算法原理、資料分析感興趣的讀者閱讀參考。

《終極演算法:機器學習和人工智慧如何重塑世界》—— 佩德羅·多明戈斯

演算法已在多大程度上影響我們的生活?購物網站用演算法來為你推薦商品,點評網站用演算法來幫你選擇餐館,GPS系統用演算法來幫你選擇好的路線,公司用演算法來選擇求職者……當機器最終學會如何學習時,將會發生什麼? 不同於傳統演算法,現在悄然主導我們生活的是“能夠學習的機器”,它們通過學習我們瑣碎的資料,來執行任務;它們甚至在我們還沒提出要求,就能完成我們想做的事。 什麼是終極演算法? 機器學習五大學派,每個學派都有自己的主演算法,能幫助人們解決特定的問題。而如果整合所有這些演算法的優點,就有可能找到一種“終極演算法”,該演算法可以獲得過去、現在和未來的所有知識,這也必將創造新的人類文明。 你為什麼必須瞭解終極演算法? 不論你身處什麼行業、做什麼工作,瞭解終極演算法都將帶給你嶄新的科學世界觀,預測以後的科技發展,佈局未來,佔位未來!

“終極演算法可以獲得過去、現在和未來的所有知識,它的發明將成為人類最偉大的科學成就之一。”機器學習和人工智慧究竟如何重塑我們的這個世界,或許你能夠在這本書中找到答案。

個人公眾號:ACM演算法日常

專注於基礎演算法的研究工作,深入解析ACM演算法題,五分鐘閱讀,輕鬆理解每一行原始碼。內容涉及演算法、C/C++、機器學習等。