
[美]傑伊·溫格羅 著
本書是簡單易懂的數據結構與算法入門書。作者略過複雜的數學公式,用“通俗講解×逐步圖示×代碼實現”的方式介紹了數據結構與算法的基本概念,培養讀者的算法思維。全書共有20章。讀者將瞭解數據結構與算法爲何如此重要,如何快速使用大O記法判斷代碼的運行效率,以及如何用動態規劃優化算法。本書的重點內容包括冒泡排序、選擇排序、插入排序等排序算法,以及深度優先搜索、廣度優先搜索、迪傑斯特拉算法等圖算法。在學習算法的過程中,讀者也將通曉數組、哈希表、棧、隊列、鏈表、圖等常用數據結構的適用場景。
第一版和第二版都不錯。 你學到了正確選擇算法和數據結構可以大幅改善代碼性能。 你學到了如何確定代碼效率。 你學到了如何優化代碼,讓代碼更快、更省空間且更優雅。 你從本書中學到了做出合理技術決策的框架。創造偉大的軟件需要評估各種可能性的優劣,而你現在已經有能力看出每種方案的優劣,根據手頭的任務做出最合理的選擇。你現在還有能力思考新的方案,即便這些方案可能並不直觀 我還希望你能從書中學到一點:這些複雜難懂的主題不過是更簡單內容的組合,而這些簡單的概念都是你可以掌握的。有些參考資料對概念的解釋並不是很好,反而讓這些概念看起來更復雜了。但不要被這些資料嚇到——任何概念都能以容易理解的方式講解。
本書自身的算法介紹也可以算作是彈出一個最大堆的父值,讓讀者學到最經典的算法以此來理解和拓展類似的算法邏輯。最開心的是,關於算法本身可以通過作者的點播聯想到更多的實際案例,例如我和同伴在討論關於公司架構按照最大堆來排嗎?調過來一個A和B就算他們能力差不多但可能會因爲上濾(從基層開始對比)和下滲(從管理層開始對比)而到了不同的位置?OKR和KPI的系統會讓最下層的員工離真正的核心方向指標越來越遠嗎?在進一步的想象中,發現就算公司管理扁平化,但信息沒有辦法隨時完全地和每個節點同步,真正的結構也仍然是堆的樣子(看起來像數組,實際回溯是通過一定規律的index向上回溯)等等,當然這些只是把很多問題簡單化的思考,但真的會讓我從不同的角度回看以前不太清晰的問題,本身也是一種分析問題的大O。總而言之,非常感謝作者的筆墨重新讓我撿起一些思考的工具。
1、零基礎工具書,強化邏輯推理學習。實例非常多,作者一點點手把手教,又圖又畫先把故事說一遍,即便代碼用不上,是一本讓小白完全能夠看明白邏輯的算法書。 還有代碼認真的一條條分析。好評! 2、這本書教會我們算法的本質是確定自己的目標(複雜度)、拆解問題,寫代碼只是其中一步。 例如算法優化—找規律中,先通過舉例子把規律找出來,代碼是呈現出來的工具/結果。 如果不想摳代碼的,單看解決問題的思路也很不錯!
斷斷續續看了一個多月終於看完了,我只能說這本書真的太棒了,自學數據結構先看這本是很好的,學校的教材未免太勸退。裏面寫得簡潔明瞭,易於理解。作爲一個很水的計網人,我寒假就看了點這本書,回來之後感覺C語言水平都好多了,打題目也更有思路了。雖然代碼經常是用ruby寫的,但是思路是通的嘛。我覺得這本給完全小白應該都能看得明白,非常之感人了。
推薦本書👍👍👍 1.數據結構就是數據的組合方式 2.算法就是爲了滿足某種需要對數據進行的操作 3.優化算法效率的前提是要明確當前代碼的效率 4.常用的排序算法有冒泡排序、插入排序、選擇排序、快速排序、查找算法有二分查找(對於有序數組很高效) 5.時間複雜度看的是步驟數而不是代碼行數 6.要根據不同的需要選擇合適的算法
爲了面試準備,最近重讀的一本書。初學算法時看得就是這本,講解的肥腸好,雖然在實現算法時有時使用了ruby或一些其他我不會的語言,但是問題不大,畢竟現在隨便一個人工智能都能幫忙轉換代碼。是一本對新手肥腸肥腸友好的書,個人認爲比那本圖解算法講解的更友好更容易懂。 另外新手學習算法還是要注意,語言不重要,重要的是思想,不管使用什麼語言來實現代碼,思想都是一樣的,不用過餘糾結語言實現的問題。。。比如很多書籍總是說C語言描述,Java語言描述。。。這些都不重要,重要的是你理解他的思路,能使用自己任意擅長的語言實現即可。。。 重讀才發現這是人民郵電出的書。。。屬於是被封面耽誤了的一本好書。
《秒懂算法:用常識解讀數據結構與算法》: 核心內容 《秒懂算法:用常識解讀數據結構與算法》是一本適合初學者的數據結構與算法入門書籍。作者傑伊·溫格羅通過“通俗講解×逐步圖示×代碼實現”的方式,幫助讀者快速理解數據結構與算法的基本概念,培養算法思維。全書共20章,內容涵蓋: 1. 數據結構的重要性:介紹了數組、哈希表、棧、隊列、鏈表、圖等常用數據結構及其適用場景。 2. 算法效率的衡量:通過大O記法幫助讀者快速判斷代碼的運行效率。 3. 排序算法:詳細講解了冒泡排序、選擇排序、插入排序等常見排序算法。 4. 圖算法:包括深度優先搜索、廣度優先搜索、迪傑斯特拉算法等。 5. 動態規劃:介紹瞭如何通過動態規劃優化算法。 讀書筆記 1. 數據結構的基礎 • 數據結構是數據的組合方式,不同的組合方式會影響代碼的運行速度。 • 常見的數據結構包括數組、棧、隊列、鏈表、哈希表和圖,每種結構都有其特定的適用場景。 2. 算法效率的衡量 • 用大O記法衡量算法的時間複雜度,而不是單純依賴運行時間。 • 例如,數組的查找操作時間複雜度爲O(1),而鏈表的查找操作爲O(n),這直接影響程序的性能。 3. 排序算法 • 冒泡排序、選擇排序和插入排序是常見的簡單排序算法,但它們的時間複雜度較高(O(n²)),適合小規模數據。 • 更高效的排序算法如歸併排序和快速排序,時間複雜度爲O(nlogn),適合大規模數據。 4. 圖算法 • 深度優先搜索(DFS)和廣度優先搜索(BFS)是圖算法的兩大基礎,適用於路徑搜索和圖遍歷。 • 迪傑斯特拉算法用於求解圖中的最短路徑問題,是圖算法中的經典。 5. 動態規劃 • 動態規劃通過將問題分解爲子問題並存儲子問題的解,避免重複計算,從而優化算法。 6. 學習方法 • 本書通過圖示和代碼實現幫助讀者理解算法和數據結構,適合初學者快速上手。 《秒懂算法》通過通俗易懂的方式,幫助讀者快速掌握數據結構與算法的核心知識,是編程初學者的入門佳作。
ruby def unique_paths(rows, columns, memo = {}) return 1 if rows == 1 || columns == 1 # 同題目 key = [rows, columns] # 若已計算,直接返回緩存值 return memo[key] if memo.key?(key) # 遞歸計算並存入緩存(利用對稱性可減少一半計算,但非必須) memo[key] = unique_paths(rows - 1, columns, memo) + unique_paths(rows, columns - 1, memo) end
作爲一個非科班自學計算機的人,我覺得這本書講解數據結構和算法這方面非常好,而且我是沒有學過任何相關的算法等這些,只是學過一些基礎的c#而已,就看這本書就可以很好的掌握這本功課了,書本有很多經典例題,結合ai來解疑,後面再刷點力扣的題來鞏固和提高就更好了,非常好,非常推薦。
他的第一版讀完了,第二版直接擴充了一倍的內容。總的來說教科書至少應該寫成這個水平才具有基本的可讀性。大部分中文書寫的要不然是背誦默寫,要不然寫成了科普,還有的就是擺列公式,搞得好像你天生就得精通微積分(從書目編排來看,往往作者可能連一加一等於二都不理解,知識水平停留在小學的九九乘法表然後用類似的肌肉歸納法成功的混到了寫書的資格,然後進一步推廣其曾接受荼毒的肌肉歸納訓練的指導)