這是從圖靈 2016 年發(fā)的一篇文章修改而來的標題,原先這篇文章的標題叫《如果你只能擁有一本算法書》。沒錯,這次,我們就不遮遮掩掩了,引用了一位大學教授的書評標題「 Best algorithms textbook by far」。從市場和讀者的反饋看,這也不是虛假宣傳。這篇文章的內(nèi)核是一篇書評,我們依然保留,送給 2016 年還沒來得及認識圖靈的小伙伴,以及還在猶豫選擇哪本算法參考書的小伙伴。
如果關注算法圖書,你可能已經(jīng)猜到我們這本書的主角了,是:《算法(第 4 版)》。
完全不夸張,《算法(第 4 版)》是目前市面上口碑、銷量、學習友好度綜合排名第一位的算法圖書。
《算法(第4版)》豆瓣中文版評分 9.4,Amazon 英文版評分 4.6,圖靈同時引入出版了中英文版,一直超級受歡迎。最近兩年,其受歡迎程度快速穩(wěn)步上漲。
當然,一本書無論別人怎么說它好,具體到你,總要去研究它是否真的適合自己的閱讀習慣和閱讀品味。那么,這本書好在哪里?你是否需要呢?
以下是 Amazon 高票支持的《算法(第4版)》書評,也是相對客觀的書評。我們來看看這位大學教授是如何評價這本書的。
最后,我們也在「閱讀原文」給出了圖靈算法書單,歡迎小伙伴挑到適合自己的算法書,攻克算法難題。
作者:Kevin P. Murphy ?(不列顛哥倫比亞大學計算機系教授)Robert Sedgewick 和 Kevin Wayne的《算法》(第4版,由 Addison-Wesley 于 2011 年 3 月出版)是我讀過的最棒的計算機科學方面的書籍之一。它應該是所有程序員以及計算機科學專業(yè)的學生的必讀書籍——它的目標是覆蓋“每個程序員都應該了解的 50 個算法”。下面我就來說說為什么我覺得這本書是如此優(yōu)秀。《算法》包含了具體的源代碼(基于一個 Java 的子集),這和它的主要對手——由 Cormen、Leiserson、Rivest 和 Stein (CLRS)完成的《算法導論》(An introduction to algorithms)——非常不同。這一點非常重要,因為它意味著學生們可以使用這些代碼去解決許多真實的問題。這些算法產(chǎn)生了從網(wǎng)絡搜索到基因組學的許多有趣和令人激動的應用,這些應用也貫穿了全書(這本書的網(wǎng)站上提供了所有的源代碼和數(shù)據(jù))。對真實代碼的一種很自然的擔心是它們可能會影響對概念的理解。但在這本書中,作者通過精心定義的抽象數(shù)據(jù)類型(隊列、背包、哈希表、樹、有向無環(huán)圖等類)賞心悅目的創(chuàng)造了許多既有可讀性又非常準確的實現(xiàn)。使用真實代碼的另一個好處是迫使你解決一些容易被忽略卻十分重要的實現(xiàn)細節(jié)。例如,大家都知道并歸排序需要輔助性內(nèi)存空間。在 CLRS 的偽代碼中,作者在他們的并歸函數(shù)內(nèi)部分配的臨時存儲空間。但在實踐中,僅分配一次臨時存儲空間并將它作為一個指針傳遞給并歸函數(shù)(或是將它作為并歸排序類的一個私有成員)將會高效得多。這種重要的技巧你又可以從哪里學到呢?除了代碼的展示之外,本書也用清晰的語言解釋了這些方法。本書非常與眾不同的一點就是包含許多詳細的例子來說明這些算法在處理真實數(shù)據(jù)時的行為和表現(xiàn)。(除非你真的實現(xiàn)了這些算法,否則是很難得到這些數(shù)據(jù)的!)這本書的另一個優(yōu)點是它嚴格遵守了軟件工程的最佳實踐:先寫 API,再寫單元測試或是實現(xiàn)一個使用該數(shù)據(jù)結構或算法的應用(用例),最后才考慮應該如何實現(xiàn)這個 API。另外,本書在許多時候還討論了同一 API 的多種實現(xiàn),它們在簡潔性、速度和內(nèi)存使用上的折中都各有不同。對于數(shù)據(jù)結構,使用“類”是很自然的,但對于算法作者也采用了這種描述方式,特別是圖算法。這使得算法能夠進行預處理并保存一些內(nèi)部狀態(tài),然后再為使用者提供服務。這種方式比傳統(tǒng)的無狀態(tài)的函數(shù)式的算法更加通用。這本書的每一節(jié)都有大量的練習,分為“簡單”、“提高”和“實驗”三種,它的網(wǎng)站提供了部分練習的解答。除了理論之外,本書還含有許多經(jīng)驗性的算法題目,這也是特色。它展示了算法的不同實現(xiàn)對于不同規(guī)模問題的實際運行時間,并用這些數(shù)據(jù)作為傳統(tǒng)理論分析的補充。相比 CLRS,這本書的一個小優(yōu)點是沒有那么厚(約 1000 頁,而 CLRS 有1300 頁)。顯然,《算法》和 CLRS 的內(nèi)容有許多重疊。從書的目錄來看這一點并不明顯,因此我寫了一份更加詳細的列表來列出這本書討論的所有問題。全書的組織非常好,前面介紹過的內(nèi)容(和代碼)會在后面得到多次應用(例如:堆 -> 優(yōu)先隊列 -> 最小生成樹的 Prim 算法)。書中的話題也會越來越高級。因此讀者最好一頁一頁的按順序閱讀本書。下面是我制作的一份書中的話題總結,這些話題從目錄上看起來并不明顯。
-- 大O記法(“線性對數(shù)”的意思是O(NlogN))-- 應用:動態(tài)連通性(p、q是否是在同一個集合中?)-- 三種實現(xiàn),最后得到一種經(jīng)典的算法-- 證明排序所需的比較次數(shù)的下界是NlogN-- 使用優(yōu)先隊列解決得到一列數(shù)中最大的N個數(shù)的問題-- 使用索引優(yōu)先隊列實現(xiàn)N個有序列表的多向合并-- 各種排序算法的比較(速度、穩(wěn)定性、原地性、額外空間的使用)-- 順序統(tǒng)計以及在O(N)時間內(nèi)找到中位數(shù)3.1 ?符號表(也叫做關聯(lián)性數(shù)組)-- 符號表與有序符號表(鍵可以被比較,因此可以得到最大和最小鍵)-- 二分查找樹的性質(zhì)(父節(jié)點比左子節(jié)點大,比右子節(jié)點小)-- get和put方法的實現(xiàn),以及對其所需時間為O(logN)的分析-- 哈希函數(shù)(例如,取模以及Horner法則)-- 基于廣度優(yōu)先搜索的單點最短路徑算法-- 使用深度優(yōu)先搜索判斷G是否是無環(huán)的-- 使用深度優(yōu)先搜索判斷G是否是二分的-- 加權有環(huán)有向圖中的最短路徑(Bellman-Ford算法與負權重邊的檢測)--?鍵索引計數(shù)法(基數(shù)排序)-- 適用于帶有重復前綴字符串的三向字符串快速排序-- longestPrefixOf方法(最長公共前綴)-- 三向字典查找樹(R向數(shù)組的二分查找樹表示)-- 使用非確定性有限狀態(tài)自動機判定字符串是否在特定的語言中6.1 ?基于優(yōu)先隊列的事件驅(qū)動模擬6.4 ?Ford-Fulkerson最大流量算法-- 最大流量問題和最短路徑問題向線性規(guī)劃問題的歸約

作者:Kevin Wayne,Robert Sedgewick
譯者:謝路云
定價:99.00元 / 英文版129.00元
本書作為算法領域經(jīng)典的參考書,全面介紹了關于算法和數(shù)據(jù)結構的必備知識,并特別針對排序、搜索、圖處理和字符串處理進行了論述。第 4 版具體給出了每位程序員應知應會的 50 個算法,提供了實際代碼,而且這些 Java 代碼實現(xiàn)采用了模塊化的編程風格,讀者可以方便地加以改造。本書配套網(wǎng)站提供了書中內(nèi)容的摘要及更多的代碼實現(xiàn)、測試數(shù)據(jù)、練習、教學課件等資源。
關注數(shù):10億+?文章數(shù):10億+
粉絲量:10億+?點擊量:10億+
?
懸賞博主專區(qū)請掃描這里

喜愛數(shù):?1億+?發(fā)帖數(shù):?1億+
回帖數(shù):?1億+?結貼率:?99.9%
—————END—————
喜歡本文的朋友,歡迎關注公眾號?程序員哆啦A夢,收看更多精彩內(nèi)容
如果覺得這篇文章還不錯,來個【分享、點贊、在看】三連吧,讓更多的人也看到~
