書單 | 10本程序員必讀的算法書籍推薦!我們?yōu)槟憧偨Y(jié)了十本各具特色的算法書,學(xué)習(xí)課程的同時(shí),閱讀這些書籍,快速前進(jìn),離你的理想目標(biāo)更近一步!
1.《算法導(dǎo)論》 Thomas H. Corman
這是最著名的算法書之一,但要注意它的理論性非常強(qiáng)。目前它已經(jīng)出到了第三版。我強(qiáng)烈建議每個(gè)程序員都在書架上放一本算法導(dǎo)論,但只用來(lái)做短暫的閱讀和參考。因?yàn)檫@本書你是不可能一口氣讀完的。我第一本就推薦它的另一個(gè)理由是,它不限定任何編程語(yǔ)言,而且還有對(duì)應(yīng)的教學(xué)課程。
2.《算法》 Robert Sedgewick & Kevin Wayne
這本書一直是我偏愛(ài)的算法參考,但現(xiàn)在我看的比較少了。你能在這本書里學(xué)到很多算法的背景知識(shí),而且現(xiàn)在這本書也有了很多對(duì)應(yīng)不同語(yǔ)言的版本(比如 Java 和 C++)。信不信由你,如果你已經(jīng)掌握了一門編程語(yǔ)言,那么用這門語(yǔ)言學(xué)習(xí)算法的曲線就會(huì)不那么陡峭。
3.《算法設(shè)計(jì)手冊(cè)》 Steve S. Skiena
這也是一本很棒的算法書,介紹的算法類型非常豐富,也包含很多代碼。我尤其喜歡書中介紹算法在實(shí)際中是如何應(yīng)用的。這有助于你了解一類算法可以用來(lái)解決怎樣的一類問(wèn)題。書中的代碼是用 C 寫的,但并不是很深?yuàn)W,所以看起來(lái)很輕松。我在畢業(yè)快十年以后看這本書,也很快就掌握了一些圖論算法。 這本書我已經(jīng)買了有十年了,現(xiàn)在還是是不是會(huì)拿出來(lái)看一看。
4.《面試算法》 Adnan Aziz
這是一本必讀的算法書,尤其對(duì)于要找工作的人來(lái)說(shuō)。光看封面就知道這本書的內(nèi)容很有趣:圖靈的人臉是用許多張不同人物的縮略圖拼成的。而書中就介紹了如何實(shí)現(xiàn)這樣的拼接算法。我喜歡這本書,因?yàn)樗鉀Q問(wèn)題的途徑和目的比較獨(dú)特。有時(shí)候懷著不同目的去學(xué)習(xí)同樣的東西可能會(huì)更有助于理解。
5.《算法簡(jiǎn)述》
這是一本很棒的算法書,尤其對(duì)于 Java 程序員來(lái)講。它著重從實(shí)現(xiàn)的角度來(lái)介紹各種算法,也不像很多其他經(jīng)典教材那樣包含很多數(shù)學(xué)。所有的算法都是用模式來(lái)描述的,也提供了學(xué)習(xí)它們的動(dòng)機(jī)、解釋用的圖片、高層次的偽代碼以及實(shí)際可運(yùn)行的代碼(C、C++、Java 和 Ruby)。書中也包含一些測(cè)試,用以證明不同算法之間理論上的性能差異。簡(jiǎn)而言之,這是程序員學(xué)習(xí)算法最好一本書之一。
6.《算法設(shè)計(jì)》 Kleinberg & Tardos
這應(yīng)該是 Thomas Coren 的算法導(dǎo)論之后第二好的算法書。它不是一本導(dǎo)論,而是面向有經(jīng)驗(yàn)的程序員。書中側(cè)重為對(duì)基本算法比較熟悉的程序員介紹了一些算法設(shè)計(jì)的知識(shí)。你應(yīng)該先看一本導(dǎo)論再來(lái)學(xué)習(xí)這本書。
7.《算法導(dǎo)論:一種新的途徑》 Udi Manber
這是一本很適合自學(xué)的書,因?yàn)槠渲邪藥装賯(gè)問(wèn)題和例子。它是為提高讀者的問(wèn)題求解能力以及令讀者掌握算法設(shè)計(jì)背后的原理所編寫的。這有助于你提高解決問(wèn)題和寫代碼的能力。
8.《算法設(shè)計(jì)與分析》 Anany Levitin
這也是每個(gè)程序員都應(yīng)該在書架上放一本的算法書。在你學(xué)習(xí)完一本導(dǎo)論書以后,你可以通過(guò)這本書來(lái)學(xué)習(xí)一些進(jìn)階知識(shí)。
9.《數(shù)據(jù)結(jié)構(gòu)和算法》 Aho, Ullman & Hopcroft
又一本精彩的數(shù)據(jù)結(jié)構(gòu)和算法入門教材。這本書排版美觀大方,很多不喜歡數(shù)學(xué)的程序員們都會(huì)喜歡它。
10.《Python算法》
這本書是為 Python 程序員所編寫的。作者 Maguns Lie Hetland 同時(shí)也是另一本很受歡迎的 Python 入門教材《Beginning Python》的作者。這本書側(cè)重介紹圖論算法。正如我所說(shuō),算法跟具體的編程語(yǔ)言是無(wú)關(guān)的。你也可以用 Java 或者 C++ 來(lái)實(shí)現(xiàn)從這本書里學(xué)到算法。當(dāng)然如果你已經(jīng)會(huì) Python,這就是一本絕佳的教材。
這就是每個(gè)程序員都應(yīng)該讀的10本算法書。當(dāng)然,算法是一個(gè)很復(fù)雜的話題,很多算法只學(xué)習(xí)一遍是很難徹底理解的。遇到這種情況時(shí),我建議把同一本書讀兩遍。并且,光讀是不夠的,你還要用自己喜歡的語(yǔ)言去實(shí)現(xiàn)算法。試著去實(shí)現(xiàn)你自己的 ArrayList 和 HashMap。學(xué)習(xí)算法的成果并不會(huì)馬上就顯露出來(lái),但你能注意到自己在思考和解決問(wèn)題的時(shí)候已經(jīng)有了細(xì)微的變化,代碼質(zhì)量也會(huì)逐漸提高。畢竟我們常說(shuō),世界上有兩種程序員,一種是懂算法的,另一種是不懂的。
|