揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。
你好,開發人員,眾所周知,演算法與語言無關,任何稱職的程式設計師都應該能夠將它們轉換為他們選擇的程式語言的程式碼。
不幸的是,我遇到過一些真正擅長 Java 或 Python 等程式語言的程式設計師,很少有人了解 API 和語言複雜性的小細節,但對演算法和資料結構的基礎知識卻知之甚少。
只要要求他們實現任何流行的排序演算法,例如快速排序或合併排序,他們就會崩潰。
如果您希望他們了解更高級和複雜的演算法,例如字串處理演算法、圖形演算法、樹遍歷或貪婪演算法,請準備好查看面試;否則,你可能會得到一些驚喜。
有一次,我遇到了一位核心 Java 高級開發人員的完美候選人,他在 Java、多線程方面非常出色,但他的資料結構和演算法技能與他的經驗和才幹相比卻是無足輕重。
當我問他為什麼在來面試之前不花時間刷一下自己的演算法和解決問題的能力?
他的藉口是, “那些演算法只是開會用的,從未真正用於實際編碼。我在 6 年的 Java 開發生涯中從未使用過它們。”
他是對的。你不需要用Java實現哈希表;你總是可以使用Python中的HashMap類別或Dictionary來達到這個目的,但他沒有認識到演算法和資料結構對提高程式設計技能的更長期的改進。
演算法是培養程式解決能力和編碼意識的工具,需要將使用者需求轉換為一行程式碼,也稱為電腦程式。
他們也無所不在,如果你使用Facebook,你有沒有想過他們是如何這麼快找到你的朋友的?或者Netflix如何推薦你想看的電影?
這些只是機器學習演算法的幾個例子,它們將演算法提升到了另一個層次。
在我的上一篇文章中,我分享了10 本開發人員必讀的軟體工程書籍,在本文中我們將只專注於演算法。
對於那些認為演算法就是資料結構的人來說,另一個黃金秘訣是給那些想在亞馬遜、Google、Facebook、英特爾或微軟工作的人;記住,當然,除了 UNIX、SQL 和C之外,它是唯一永恆的技能。
程式語言來來去去,但程式設計的核心,即演算法和資料結構保持不變。
如果您知道哈希表的工作原理,那麼您可以在任何程式語言中使用它們的實現,例如 JDK 中的HashMap 、Python 中的 Dictionary 或 C++ boost 庫中的 HashMap。
因此,如果您認真對待程式設計並意識到演算法和資料結構不是可選的,那麼這裡有一些學習演算法的好書。
你們中的一些人可能已經讀過它們,但它們值得再次閱讀。
這是最受歡迎的演算法書籍之一,但請注意它包含大量的理論。
本書的現行版本是第四版,我強烈建議每個程式設計師都應該在書架上備有這本書,但僅供簡短閱讀和參考。
本書通常也稱為 CLRS(以其作者 Cormen、Leiserson、Rivest 和 Stein 命名),是電腦科學領域的一本開創性教科書。
這項全面且權威的資源現已推出第四版,提供了對基本演算法和資料結構的深入探索。
這本書也是資料結構和演算法的黃金標準,但是不可能一下子就讀完這本書,而且有些人可能會覺得讀起來很困難。
在這種情況下,您可以將您的學習與線上課程(例如《資料結構和演算法:使用 Java 進行深入研究》)和本書結合。
這就像兩全其美,您可以在線上課程中快速學習基本演算法,然後透過閱讀這本書來進一步鞏固這些知識,既然您已經上完課程,這對您來說會更有意義。
我推薦這本書作為第一本演算法書籍的另一個原因是它與語言無關並且附有講座
這是學習 Python 演算法的最佳書籍之一。當我厭倦了閱讀《演算法》和《演算法導論》這本書時,我開始閱讀這本書,它非常令人耳目一新。
從書的大小開始,與其他鼓勵我閱讀的演算法書相比,這本書相當精簡和乾淨。
然後我迷上了 Aditya 的圖表和解釋以及我可以聯繫到的現實世界的例子,例如當我登入時 Facebook 如何找到我的個人資料。
他們關於動態編程和背包問題的章節是另一個寶石,就像以前一樣,我從未真正理解動態編程,但這本書使使用動態編程變得非常容易,就像遞歸和分而治之方法的擴展一樣。
所有這些都使得本書成為一本關於演算法的必備書籍,特別是對於 Python 開發人員而言。事實上,這是關於 Python 的最好的演算法書籍之一。
但如果你問這是最容易閱讀的書之一,涉及資料結構、演算法和動態程式設計等複雜主題。我強烈推薦這本書以及 Aditya Bhargava 的其他書籍。
順便說一句,如果您也像我一樣對動態程式設計感到困擾,您還可以查看 DesignGurus.io 上的Grokking Dynamic Planning Patterns for Coding Interview課程,這是我在準備程式設計面試動態程式設計問題時經常使用的另一個資源。這也是我之前提到的他們所有課程包的一部分。
很長一段時間以來,這是我首選的演算法資源,現在仍然如此,但現在我看到它的頻率比以前少了。你將學到很多關於演算法的背景知識,現在,甚至本書的特定版本也適用於不同的程式語言,如 Java 和 C++。
本書還提供了一些免費的 Coursera 線上課程: 演算法第 1 部分和演算法第 2 部分,它們很好地補充了本書。太棒了。這也是我對 Java 程式設計師學習演算法的首要推薦。
不管你相信與否,但如果你已經了解一種程式語言,那麼看到該程式語言的演算法範例比其他語言更能縮短學習曲線。您也可以在這裡免費線上閱讀本書的第四版。
這是另一本關於電腦演算法的優秀書籍,其中還介紹了大量演算法和大量程式碼。
我特別喜歡這本書的一點是,他實際上給出了在實踐中使用演算法(或其變體)的範例;它確實可以幫助您了解特定演算法(或演算法系列)可用於解決的問題類別。
程式碼是用C語言寫的,但並不是很深奧,而且很容易理解。我也已經離開學校一段時間了,這幫助我很快就掌握了幾個圖形演算法。
我已經擁有這個近 10 年了,並且仍然不時地查看它。
本書的一個顯著特點是包含「戰爭故事」**,它們提供了對演算法設計和問題解決的現實世界見解。
這本書經常因其實用性而受到稱讚,除了正式的演算法分析之外,還強調直覺和解決問題的技能的重要性。
它也廣泛用於學術環境,對於任何尋求更深入了解演算法原理及其實際應用的人來說都是寶貴的資源。
這是我讀到的關於資料結構和演算法的最新書之一,我在假期期間讀了這本書,非常喜歡它。
本書由ByteByteGo創辦人、著名《系統設計訪談-內幕指南》作者Alex Xu與Shaun Gunawardane合作創作。
這本書將教你編碼模式,例如兩個指針、滑動視窗、快速指針和慢指針,你可以用它們來解決數百個 Leetcode 問題。
雖然編碼面試模式的想法並不新鮮,而且我已經知道他們已經完成了DesignGurus.io 中的 Grokking the Coding Patterns等課程,但這本書將它們與更多真實世界的示例結合在一起,你可以在其他地方找到。
有 101 個真實的程式設計面試問題和詳細的解決方案,最重要的是 1000 多個圖表,使學習變得非常容易。僅僅因為這些圖表,這本書的價值就增加了數倍。
簡而言之,《編碼面試模式》是一本很棒的書,可以幫助您開始編碼面試模式並掌握在下一次編碼面試中取得成功所需的關鍵模式。
這是獲取本書的連結 ---程式設計面試模式:釘牢你的下一次程式設計面試
阿德南·阿齊茲 (Adnan Aziz) 的《面試演算法》是一本關於演算法的必讀書籍,其寫作目的是為了牢記程式設計面試。
如果你仔細觀察封面上用名人縮圖繪製的圖像,封面本身就表明這本書是多麼不尋常,並且這本書還解釋瞭如何開發此類演算法。很有趣,不是嗎?
嗯,我喜歡這本書,因為它的方法和目標,有時用不同的物件學習相同的東西有助於更好地理解它。
您也可以將本書與 DesignGurus.io 提供的優秀互動課程Grokking the Coding Interview: Patterns for Coding Questions結合起來,學習基本的編碼模式,如滑動視窗、合併間隔、快慢指針等,這些模式可用於解決問題100 多個Leetcode 問題。
而且,如果您喜歡 DesignGuru 的這些 Grokking 面試課程,您可以透過購買他們的所有課程捆綁包以大折扣獲得所有課程。該捆綁包包括他們最受歡迎的 Grokking 課程。您還可以使用折扣程式碼 GURU 獲得 30% 的折扣。
簡而言之,O'Reilly's Algorithms 是一本學習程式設計演算法的優秀書籍,特別是對於 Java 程式設計師來說。
它描述了演算法,重點是實現它們,沒有經典演算法書籍中使用的大量數學知識。
所有演算法均以模式形式呈現,並附有使用它們的動機、提供高級概述的圖片和偽程式碼以及工作程式碼(C、C++、 Java和Ruby語言)。
他們還提供基準來提供演算法理論性能的證明。簡而言之,這是程式設計師學習演算法的最佳書籍之一。
這其實是繼 Thomas Cormon 的《演算法導論》之後第二好的演算法書。
它並不是真正的演算法介紹,更適合經驗豐富的程式設計師。
對於熟悉基本演算法的開發人員來說,更多的是演算法設計。
您應該從 Robert Sedgewick 的《演算法簡介》一書或《演算法簡介》開始,然後繼續閱讀這本書。
Udi Manber 的《演算法簡介:創意方法》是另一本優秀的自學書籍,因為它充滿了數百個問題和範例。
本書旨在增強讀者解決問題的能力和對演算法設計背後原理的理解,這將幫助您發展問題解決和編碼技能。
這是電腦演算法的另一位偉大廚師,值得在程式設計師的書架上佔有一席之地。
一旦您學完 Coursera 的演算法課程和其中一本介紹書籍,您就可以閱讀本書來學習演算法中的高級主題。
另一本關於演算法和資料結構的好入門書。這是一本可愛而明亮的書,任何不喜歡在演算法中大量使用數學的程式設計師都會喜歡這本書。
順便說一句,如果您發現這本書難以閱讀,這也是我的一些讀者所抱怨的,那麼您還可以看看 Aditya Bhargava 的《Grokking Algorithms》 ,這是針對初學者的最簡單、最令人興奮的算法書籍之一。
本書是為Python程式設計師設計的。 Magnus Lie Hetland 也是一本流行的 Python 入門書籍Beginning Python的作者。
正如我所說,演算法是獨立於語言的;學習Python演算法並不代表你不能用Java或C++來實現它們,但如果你已經了解Python,那麼這是一本學習電腦演算法的優秀書籍。
本書也重點介紹了圖演算法,這對於解決現實世界的問題非常有用。
這就是每個程式設計師都應該閱讀的 12 本演算法書籍。我同意演算法是一個複雜的話題,一口氣讀完並不容易理解;在這種情況下,我建議同一本書讀兩次。
另外,光是閱讀是不夠的,試著用你喜歡的程式語言來實現它們。編寫自己的 ArrayList、HashMap 或基於樹的 Map 實作並沒有什麼壞處。
學習演算法的效果並不是立即可見的,但隨著時間的推移,你會注意到你的思維、解決方案建構和程式碼品質有了微妙的提升。
順便說一句,如果您對演算法線上課程感興趣,我建議您查看資料結構和演算法:使用 Java 進行深入研究 在 Udemy 上。
這不是免費課程,但您可以在每隔幾天進行一次的 Udemy 閃購中以不到 10 美元的價格購買課程。
最後,有兩種類型的程式設計師,一種了解演算法,一種不懂演算法。
請記住,每一本書都代表著知識的寶庫,可以改變您的軟體工程方法。所以今天就選一個,開始你的精通之旅吧!
而且,如果你還沒讀過,你還可以閱讀我之前分享的10本開發者必讀軟體工程書籍,它包含了軟體工程師和開發者除了演算法之外的書籍。
祝福您的學習之旅一切順利!
原文出處:https://dev.to/somadevtoo/10-must-read-data-structures-and-algorithms-books-for-developers-39f1