1. 程式人生 > >你一定能看懂的演算法基礎書《演算法圖解》

你一定能看懂的演算法基礎書《演算法圖解》

  • 你一定能看懂的演算法基礎書
  • 程式碼示例基於Python
  • 400多個示意圖,生動介紹演算法執行過程
  • 展示不同演算法在效能方面的優缺點
  • 教會你用常見演算法解決每天面臨的實際程式設計問題

圖片描述

本書易於理解,沒有大跨度的思維跳躍,每次引入新概念時,都立即進行詮釋,或者指出將在什麼地方進行詮釋。核心概念都通過練習和反覆詮釋進行強化,以便你檢驗假設,跟上步伐。

書中使用示例來幫助理解。我的目標是讓你輕鬆地理解這些概念,而不是讓正文充

閱讀路線圖

本書前三章將幫助你打好基礎。

第1章:你將學習第一種實用演算法——二分查詢;還將學習使用大O表示法分析演算法的速度。本書從始至終都將使用大O表示法來分析演算法的速度。

第2章:你將學習兩種基本的資料結構——陣列和連結串列。這兩種資料結構貫穿本書,它們還被用來建立更高階的資料結構,如第5章介紹的散列表。

第3章:你將學習遞迴,一種被眾多演算法(如第4章介紹的快速排序)採用的實用技巧。

根據我的經驗,大O表示法和遞迴對初學者來說頗具挑戰性,因此介紹這些內容時我放慢了腳步,花費的篇幅也較長。

餘下的篇幅將介紹應用廣泛的演算法。

問題解決技巧:將在第4、8和9章介紹。遇到問題時,如果不確定該如何高效地解決,可嘗試分而治之(第4章)或動態規劃(第9章);如果認識到根本就沒有高效的解決方案,可轉而使用貪婪演算法(第8章)來得到近似答案。

散列表:將在第5章介紹。散列表是一種很有用的資料結構,由鍵值對組成,如人名和電子郵件地址或者使用者名稱和密碼。散列表的用途之大,再怎麼強調都不過分。每當我需要解決問題時,首先想到的兩種方法是:可以使用散列表嗎?可以使用圖來建立模型嗎?

圖演算法:將在第6、7章介紹。圖是一種模擬網路的方法,這種網路包括人際關係網、公路網、神經元網路或者任何一組連線。廣度優先搜尋(第6章)和狄克斯特拉演算法(第7章)計算網路中兩點之間的最短距離,可用來計算兩人之間的分隔度或前往目的地的最短路徑。

K最近鄰演算法(KNN):將在第10章介紹。這是一種簡單的機器學習演算法,可用於建立推薦系統、OCR引擎、預測股價或其他值(如“我們認為Adit會給這部電影打4星”)的系統,以及對物件進行分類(如“這個字母是Q”)。

接下來如何做:第11章概述了適合你進一步學習的10種演算法。

各種符號。我還認為,如果能夠回憶起熟悉的情形,學習效果將達到最佳,而示例有助於喚醒記憶。因此,如果你要記住陣列和連結串列(第2章)之間的差別,只要想想在電影院找座位就坐的情形。另外,不怕你說我囉嗦,我是視覺型學習者,因此本書包含大量的圖示。

本書內容是精挑細選的。沒必要在一本書中介紹所有的排序演算法,不然還要維基百科和可汗學院做什麼。書中介紹的所有演算法都非常實用,對我從事的軟體工程師的工作大有幫助,還可為閱讀更復雜的主題打下堅實的基礎。祝你閱讀愉快!

目錄

第 1 章 演算法簡介
第 2 章 選擇排序
第 3 章 遞迴
第 4 章 快速排序
第 5 章 散列表
第 6 章 廣度優先搜尋
第 7 章 狄克斯特拉演算法
第 8 章 貪婪演算法
第 9 章 動態規劃
第 10 章 K最近鄰演算法
第 11 章 接下來如何做
練習答案