算法圖解 (Grokking Algorithms: An illustrated guide for programmers and other curious people) 算法图解

巴爾加瓦 (Aditya Bhargava)

買這商品的人也買了...

商品描述

本書示例豐富,圖文並茂,以讓人容易理解的方式闡釋了算法,旨在幫助程序員在日常項目中更好地發揮算法的能量。書中的前三章將幫助你打下基礎,帶你學習二分查找、大O表示法、兩種基本的數據結構以及遞歸等。餘下的篇幅將主要介紹應用廣泛的算法,具體內容包括:面對具體問題時的解決技巧,比如,何時採用貪婪算法或動態規劃;散列表的應用;圖算法;Kzui近鄰算法。

作者簡介

作者:【美】巴爾加瓦(Aditya Bhargava)譯者:袁國忠
Aditya Bhargava 軟件工程師,兼具計算機科學和美術方面的教育背景,在adit.io撰寫編程方面的博客。

目錄大綱

前言
致謝
關於本書


第1章算法簡介1 
1.1引言1 
1.1.1性能方面1 
1.1.2問題解決技巧2 
1.2二分查找2 
1.2.1更佳的查找方式4 
1.2.2運行時間8 
1.3大O表示法8 
1.3.1算法的運行時間以不同的速度增加9 
1.3.2理解不同的大O運行時間10 
1.3.3大O表示法指出了最糟情況下的運行時間12 
1.3.4一些常見的大O運行時間12 
1.3.5旅行商13 
1.4小結15 


第2章選擇排序16 
2.1內存的工作原理16 
2.2數組和鍊錶18 
2.2.1鍊錶19 
2.2.2數組20 
2.2.3術語21 
2.2.4在中間插入22 
2.2.5刪除23 
2.3選擇排序25 
2.4小結28 


第3章遞歸29 
3.1遞歸29 
3.2基線條件和遞歸條件32 
3.3棧33 
3.3.1調用棧34 
3.3.2遞歸調用棧36 
3.4小結40 


第4章快速排序41 
4.1分而治之41 
4.2快速排序47 
4.3再談大O表示法52 
4.3.1比較合併排序和快速排序53 
4.3.2平均情況和最糟情況54 
4.4小結57 


第5章散列表58 
5.1散列函數60 
5.2應用案例63 
5.2.1將散列表用於查找63 
5. 2.2防止重複64 
5.2.3將散列表用作緩存66 
5.2.4小結68 
5.3衝突69 
5.4性能71 
5.4.1填裝因子72 
5.4.2良好的散列函數74 
5.5小結75 


第6章廣度優先搜索76 
6.1圖簡介77 
6.2圖是什麼79 
6.3廣度優先搜索79 
6.3.1查找最短路徑82 
6.3.2隊列83 
6.4實現圖84 
6.5實現算法86 
6.6小結93 


第7章狄克斯特拉算法94 
7.1使用狄克斯特拉算法95 
7.2術語98 
7.3換鋼琴100 
7.4負權邊105 
7.5實現108 
7.6小結116 


第8章貪婪算法117 
8.1教室調度問題117 
8.2背包問題119 
8.3集合覆蓋問題121 
8.4 NP完全問題127 
8.4.1旅行商問題詳解127 
8.4.2如何識別NP完全問題131 
8.5小結133 


第9章動態規劃134 
9.1背包問題134 
9.1.1簡單算法135 
9.1.2動態規劃136 
9.2背包問題FAQ 143 
9.2.1再增加一件商品將如何呢143 
9.2.2行的排列順序發生變化時結果將如何145 
9.2.3可以逐列而不是逐行填充網格嗎146 
9.2.4增加一件更小的商品將如何呢146 
9.2.5可以 商品的一部分嗎146 
9.2.6旅遊行程最優化147 
9.2.7處理相互依賴的情況148 
9.2.8計算最終的解時會涉及兩個以上的子背包嗎148 
9.2.9最優解可能導致背包沒裝滿嗎149 
9.3最長公共子串149 
9.3.1繪製網格150 
9.3.2填充網格151 
9.3.3揭曉答案152 
9.3.4最長公共子序列153 
9.3.5最長公共子序列之解決方案154 
9.4小結155 


第10章K最近鄰算法156 
10.1橙子還是柚子156 
10.2創建推薦系統158 
10.2.1特徵抽取159 
10.2.2回歸162 
10.2.3挑選合適的特徵164 
10.3機器學習簡介165 
10.3.1 OCR 165 
10.3.2創建垃圾郵件過濾器166 
10.3.3預測股票市場167 
10.4小結167 


第11章接下來如何做168 
11.1樹168 
11.2反向索引171 
11.3傅里葉變換171 
11.4並行算法172 
11.5 MapReduce 173 
11.5.1分佈式算法為何很有用173 
11.5.2映射函數173 
11.5.3歸併函數174 
11.6布隆過濾器和HyperLogLog 174 
11.6.1布隆過濾器175 
11.6.2 HyperLogLog 176 
11.7 SHA算法176 
11.7.1 較文件177 
11.7.2檢查密碼178 
11.8局部敏感的散列算法178 
11.9 Diffie—Hellman密鑰交換179 
11.10線性規劃180 
11.11結語180 
練習答案181