演算法圖解

該導圖與本書物理結構無關,目錄以實物為主。

讀本書之前你需要花兩天時間通讀一下Python的基本語法。

全書講述了幾種經典演算法以及在生活中的應用,包括代碼實現。在使用這些演算法時人們創造了適合它的數據結構,以及演算法思想,才能更高效地解決問題。

第一章以最經典的二分查找開頭,引入大O表示法來表述運行時間,與極限類似,常數不重要,最重要的是階(類似高階無窮小)。

第二章講述內存中的基礎數據結構,數組擅長找元素,鏈表擅長找位置,為了適應對數據不同的操作要求,應當靈活使用。

第三章講述遞歸,即調用函數自身的編程方法,遞歸需要的 基線條件即最簡單狀態,遞歸條件即指導函數將條件引向最簡狀態。由於遞歸的特殊性,調用棧必不可少,棧為先進後出的數據結構,類似高斯消元法的「向前——向後」,我們將問題逐漸堆高簡化,再從高處解決,帶入底端,此為調用棧。

第四章以前一章的遞歸為基礎,講述「分而治之」,即D&C,以三組練習進行遞歸編程實戰,分別為sum,len,max。重點講述二分查找的基礎——快速排序。

第五章講述散列表,在Python中實現為字典,以散列函數與數組等構成,優點兼具數組與鏈表,防止重複,可以模擬映射關係。

第六章講述圖演算法中的廣度優先搜索,使用在非加權圖上的最短路徑求解,如果應用在按順序的查找最短路徑上,需要使用一種新的數據結構——隊列,先進先出。

第七章講述狄克斯特拉演算法,一種適用於有向無環僅有非負權的圖上。需要使用散列表來完成代碼,略複雜。如果有負權邊,需要使用貝爾曼—福德演算法。

第八章講述貪婪演算法,一種在NP完全問題下求近似的演算法,即每步選擇局部最優解。旅行商問題與集合覆蓋問題都是NP完全問題。

第九章動態規劃,類似分而治之,將大問題簡化,可在約束條件下盡量找到最優解,可應用於求最長公共子序列及子串,但是無法解決離散子問題,需要人為分解。

第十章講述K最近鄰演算法,在提取特徵之後,可創立推薦系統。KNN演算法在機器學習方面有很重要的作用。

第十一章講述了其他十種常用演算法,涉及到查找、分散式計算、密碼學等方面。

全書多圖,比如對調用棧的描述

簡單易懂,照顧初學者,盡量闡明所有細節,不厭其煩

Python代碼相對於其他語言本就比較簡單,然而作者依然細心解釋

甚至,再以圖說明一遍

全書皆以生活常見的例子為引,以大量插圖來說明,而非某些書籍毫無意義的幾張圖片。之後以Python代碼實現,配合圖的思路,而不是一蹴而就,讓人如墜霧中。

本書適合演算法入門以及單純地了解一下演算法,經典演算法即使在生活中也擁有豐富的創造力。

最後還有幾個代碼實現需要細讀,回去複習Python了。


推薦閱讀:

Python3如何實現兩個列表的交叉列印?
零: 深度學習Theory&Code從0到1——先導篇之matplotlib 進階教程)
關愛女性健康,從我做起
如何評價 Quora 的 Ultralisk 並行架構?
列表生成式版圖片拼接——知乎是喵多還是汪多系列

TAG:Python | 演算法 | 計算機科學 |