每個程式設計師都應該閱讀關於資料結構和程式語言的十大演算法書籍!
演算法、資料結構與語言並沒有直接關係,任何稱職的程式設計師都應該能夠將它們轉換為自己選擇的語言。不幸的是,我遇到過幾個非常擅長程式語言的程式設計師,以Java為例,他們知道API的小細節和複雜的語言流程,但對演算法卻知之甚少。讓他們糾正比較流行的排序演算法,比如快速排序演算法,他們會難以下手。別說更復雜的演算法,如字串,影像演算法,樹或貪婪演算法(等等)。
有一次,我問了一個非常優秀的應聘者,他擅長Java和多執行緒,但是他在資料結構和演算法上的能力是極其淺薄的。我問他,為什麼他來面試前不花時間學習演算法和解決問題的技巧。他的藉口是"這些演算法只適用於面試,從未真正用於實際的編碼。在我6年的Java開發生涯中,我從未使用過它們。"他是對的,但他沒有認識到從長遠的角度考慮,演算法和資料結構在提高程式設計技能方面所起的作用。它們是培養程式設計技巧和編碼意識的工具,是將使用者需求轉化為一行程式碼(也稱為計算機程式)的"必需品"。
10本關於演算法和資料結構的書籍,開發人員必讀
演算法就是資料結構,是為那些想在亞馬遜,谷歌,臉書,英特爾或微軟工作的人準備的,記住這是唯一永恆的技能。當然,除了UNIX和C語言之外,語言來來去去,似乎很難統一。但程式設計的核心是演算法和資料結構。如果你知道雜湊表是如何工作的,那麼你可以在任何程式語言中使用它們,例如JDK中的HashMap或C+Boost庫中的HashMap。因此,如果你現在認真考慮程式設計並認識到演算法和資料結構是你必須掌握的,這裡有一些學習演算法的好書。你們中的一些人可能以前讀過,但它們值得再讀一遍。
托馬斯·科爾曼的《演算法導論》
(http://aax-us-east.amazon-adsystem.com/x/c/QorfaNaA1mR7FOHY0lphrUIAAAFmR6sZRAEAAAFKAUukP4A/https://assoc-redirect.amazon.com/g/r/http://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844/ref=as_at?creativeASIN=0262033844&linkCode=w61&imprToken=gaqdlw0ZBFSHo9hN76xyuA&slotNum=0&tag=javamysqlanta-20)
這是最流行的演算法書籍之一,但要知道它包含了大量的理論。這本書的最新版本是第三版,我強烈建議每個程式設計師都應該把它放在他們的書架上,但僅限於短期閱讀和參考。因為一口氣讀完這本書是不可能的。另外我推薦這本書作為第一本關於演算法的書,因為它與語言並沒有直接關係。
羅伯特·塞奇維克和凱文·韋恩的《演算法》
(http://aax-us-east.amazon-adsystem.com/x/c/QorfaNaA1mR7FOHY0lphrUIAAAFmR6sZRAEAAAFKAUukP4A/https://assoc-redirect.amazon.com/g/r/http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=as_at?creativeASIN=032157351X&linkCode=w61&imprToken=gaqdlw0ZBFSHo9hN76xyuA&slotNum=1&tag=javamysqlanta-20)
很長一段時間以來,這是我最喜歡的演算法資源,現在仍然是,但是我現在看它的次數比以前少了。你會學到很多關於演算法的背景知識,現在這本書的特定版本可以用在不同的程式語言上,例如Java和c++。還有一門課程是關於這本書的,即《演算法》第1部分和《演算法》第2部分。這是我對Java程式設計師學習演算法的最好建議,信不信由你。如果你已經知道了一種程式語言,那麼閱讀這本書你要獲得全新的理解。你也可以在網上免費閱讀這本書的第四版。
史蒂夫S.斯基納的《演算法設計手冊》
(http://aax-us-east.amazon-adsystem.com/x/c/QorfaNaA1mR7FOHY0lphrUIAAAFmR6sZRAEAAAFKAUukP4A/https://assoc-redirect.amazon.com/g/r/http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/ref=as_at?creativeASIN=1849967202&linkCode=w61&imprToken=gaqdlw0ZBFSHo9hN76xyuA&slotNum=2&tag=javamysqlanta-20)
這是另一本關於演算法的好書,裡面有大量的演算法程式碼。我特別喜歡這本書的地方是他在實踐中使用演算法(或其變體)的例子;它確實可以幫助你看到某個特定演算法(或一系列演算法)是如何解決特定類別的問題。
程式碼是用C語言編寫的,但它不是很深奧,很容易理解。
通過這本書,我在圖形演算法上得到了很快的提高。我已經用了差不多10年,現在仍然不時地閱讀它。
《面試常見演算法》
(http://aax-us-east.amazon-adsystem.com/x/c/QorfaNaA1mR7FOHY0lphrUIAAAFmR6sZRAEAAAFKAUukP4A/https://assoc-redirect.amazon.com/g/r/http://www.amazon.com/Algorithms-For-Interviews-Adnan-Aziz/dp/1453792996/ref=as_at?creativeASIN=1453792996&linkCode=w61&imprToken=gaqdlw0ZBFSHo9hN76xyuA&slotNum=3&tag=javamysqlanta-20)
Adnan Aziz寫的《面試常見演算法》是一本關於演算法的必讀書籍,它的目的是讓程式設計面試"有跡可循"。封面本身顯示了這本書有多有趣,如果你仔細觀察封面上的圖片,你會發現是用名人的縮圖繪製的,這本書解釋瞭如何開發這種演算法。我喜歡這本書,因為它的方法和目標都頗為獨特。
《演算法技術手冊》/即:Algorithm in Nutshell
簡而言之,奧萊利的演算法是一本學習程式設計演算法的好書,尤其是對Java程式設計師來說。它描述了演算法,重點是如何實現它們。它沒有像其他經典的演算法書籍一樣使用大量的數學理念,而是把所有的演算法都以模式的形式呈現,告訴你使用它們的動機,給出概述的圖片和虛擬碼以及工作程式碼(在C、c++、Java和Ruby中)。這本書為演算法的理論效能提供了很好的想法。簡而言之,這是為程式設計師學習演算法所準備的最好書籍(之一)。
Kleinberg和Tardos的《演算法設計》/即:Algorithm Design
這實際上是繼托馬斯·科爾曼的《演算法導論》之後,演算法領域的第二好書。它並不是對演算法進行介紹,它更適合有經驗的程式設計師。它更多的是為熟悉基本演算法的開發人員準備的。你應該從羅伯特·塞奇維克的《演算法》開始,然後再閱讀這本書。
《演算法導論:一種創造性的方法》/即:Introduction to Algorithms: A Creative Approach
《演算法導論:一種創造性的方法》是一本很好的自學書籍,因為它充滿了數百個問題和例子。它旨在提高讀者解決問題的能力和理解演算法設計背後的原則,這將幫助你提高你的程式解決和編碼方面的能力。
《演算法的設計與分析》/即:The Design and Analysis of Algorithms
這是另一本偉大的計算機演算法書籍,值得在程式設計師的書架上佔有一席之地。一旦你學習了Coursera的演算法課程和其中一本入門書籍,你就可以閱讀這本書來學習演算法方面的高階主題。
《資料結構和演算法》/即:Data Structures and Algorithms
這是另一本關於演算法和資料結構的好書。一本詳細而清晰的書,任何不喜歡在演算法上大量使用數學的程式設計師都會喜歡這本書。
《Python演算法:掌握Python語言的基本演算法》/即:Python Algorithms: Mastering Basic Algorithms in the Python Language
這本書是為Python程式設計師設計的。MagnusLieHetland也是另外一本流行的python入門書《開始走進Python》的作者。這本書給出了很多關於圖形演算法的要點。正如我已經告訴過的,演算法是獨立於語言的,學習python演算法並不意味著你不能在Java或C+中實現它們,但是如果你已經知道Python,那麼這是一本學習計算機演算法的好書。
這就是每個程式設計師應該閱讀的10本演算法書籍。我同意演算法的複雜性,在一次閱讀中很難理解它們,在這種情況下,我建議閱讀同一本書兩次。此外,僅僅閱讀是不夠的,試著用你喜歡的程式語言來實現它們。編寫自己的動態陣列、HashMap或基於樹的實現並不為過。學習演算法的效果並不是立即可見的,但隨著時間的推移,你會注意到你的思維、解決方案的構建和程式碼質量都有了細微的改進。最後,我們只會有兩種型別的程式設計師,一個懂演算法,一個不懂演算法。
如果你喜歡這一系列的書籍,那麼你也會喜歡我這次收集的每一個程式設計師都應該讀的10本書,這是近50年來關於程式設計、編碼、軟體開發技術方面最偉大的書籍清單。
順便說一下,如果你對線上演算法課程感興趣,我建議你看看《演算法和資料結構》的第1和2部分(https://pluralsight.pxf.io/c/1193463/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fads-part1)。這門網課Pluralsight上有。這是免費的課程,但你需要登入Pluralsight。它還提供10天的免費試用期,這足以讓你選修這門課程以及其他資料結構和演算法課程。
來自 “ http://houseofbots.com/artificial-intelligence ”,原文連結:http://blog.itpub.net/31545819/viewspace-2215630/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 每個程式設計師都應該讀的書程式設計師
- 每個程式設計師都該閱讀的10本書程式設計師
- 每個程式設計師應該閱讀的10本經典書籍程式設計師
- Rework:每個程式設計師都應該讀的一本書程式設計師
- 國外程式設計師推薦:每個程式設計師都應該讀的非程式設計書程式設計師
- 每個程式設計師都應該知道的下一個程式語言——Kotlin程式設計師Kotlin
- 每個程式設計師都應該讀《Unix程式設計藝術》程式設計師
- 每個程式設計師都應該成為架構師程式設計師架構
- 國外程式設計師推薦:每個程式設計師都應讀的書程式設計師
- StackOverflow程式設計師推薦:每個程式設計師都應讀的30本書(轉載)程式設計師
- 每個人都應該懂點函數語言程式設計函數程式設計
- 書單推薦:每個程式設計師的程式設計之路上都應該看這11本書程式設計師
- 推薦Java程式設計師閱讀的書籍Java程式設計師
- 程式設計師,應該看的書籍列表程式設計師
- 關於時間,每個程式設計師都應瞭解的事程式設計師
- 每個程式設計師都應該知道的 15 個最佳 PHP 庫程式設計師PHP
- 每個程式設計師都應該知道的基礎數論程式設計師
- 每個程式設計師都應瞭解的關於時間的事程式設計師
- 關於 Unicode 每個程式設計師應該知道的 5 件事Unicode程式設計師
- JavaScript權威Douglas Crockford:程式碼閱讀和每個人都該學的程式設計JavaScript程式設計
- 關於Unicode,字符集,字元編碼,每個程式設計師都應該知道的事Unicode字元程式設計師
- 每個程式設計師都應該學會分解複雜的方法程式設計師
- 每個程式設計師都應該參加一次 GDD程式設計師
- 每個程式設計師都應該收藏的演算法複雜度速查表程式設計師演算法複雜度
- 十大Java程式設計師書籍Java程式設計師
- C語言程式設計讀書筆記:結構C語言程式設計筆記
- 關於Web開發,每個程式設計師都應瞭解的那些事Web程式設計師
- 程式設計師應該讀的10本書程式設計師
- 每個程式設計師都必讀的10篇文章程式設計師
- 為SSD程式設計(6):總結—每個程式設計師都應該瞭解的固態硬碟知識程式設計師硬碟
- 每個程式設計師都應該瞭解的記憶體知識程式設計師記憶體
- 每個程式設計師都該知道的編碼準則程式設計師
- 每個程式設計師都應該學習使用Python或Ruby程式設計師Python
- 每一個 Laravel 工程師都應該閱讀 『Rails 信條』Laravel工程師AI
- 每個程式設計師應該知道的12個API程式設計師API
- 每個程式設計師應該知道12件事程式設計師
- 每個Python新手都應該知道的程式設計技巧Python程式設計
- 一個程式設計師的讀書筆記——關於程式設計的反思程式設計師筆記