作 者:(美)巴爾加瓦 著 袁國忠 譯
定 價:69.8
出 版 社:人民郵電出版社
出版日期:2017年03月01日
頁 數:196
裝 幀:平裝
ISBN:9787115447630
像小說一樣有趣的算法入門書。算法是解決問題的一步步流程,也是計算機科學領域的核心主題。如今程序員經常使用的算法已經經過了前人的探索、檢驗及證明。如果你想搞明白這些算法,又不想被困在繁瑣的證明中,本書正是你的不二選擇。這本圖示豐富、引人入勝的實用指南將讓你輕松學會如何在自己的程序中高效使用重要的算法。你一定能看懂的算法基礎書代碼示例基於Python400多個示意圖,生動介紹算法執行過程展示不同算法在性能方面的優缺點教會你用常見算法解決每天面臨的實際編程問題
●第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.4NP接近問題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背包問題FAQ143
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.1OCR165
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.5MapReduce173
11.5.1分布式算法為何很有用173
11.5.2映射函數173
11.5.3歸並函數174
11.6布隆過濾器和HyperLogLog174
11.6.1布隆過濾器175
11.6.2HyperLogLog176
11.7SHA算法176
11.7.1比較文件177
11.7.2檢查密碼178
11.8局部敏感的散列算法178
11.9Diffie-Hellman密鑰交換179
11.10線性規劃180
11.11結語180
練習答案181
本書示例豐富,圖文並茂,以讓人容易理解的方式闡釋了算法,旨在幫助程序員在日常項目中更好地發揮算法的能量。書中的前三章將幫助你打下基礎,帶你學習二分查找、大O表示法、兩種基本的數據結構以及遞歸等。餘下的篇幅將主要介紹應用廣泛的算法,具體內容包括:面對具體問題時的解決技巧,比如,何時采用貪婪算法或動態規劃;散列表的應用;圖算法;K 近鄰算法。
(美)巴爾加瓦 著 袁國忠 譯
Aditya Bhargava軟件工程師,兼具計算機科學和美術方面的教育背景,在adit.io撰寫編程方面的博客。