算法精粹:經典計算機科學問題的Python實現 | 被動收入的投資秘訣 - 2024年5月

算法精粹:經典計算機科學問題的Python實現

作者:(美)大衛·科派克
出版社:人民郵電
出版日期:2020年07月01日
ISBN:9787115535122
語言:繁體中文

本書是一本面向中高級程式師的演算法教程,借助Python語言,用經典的演算法、編碼技術和原理來求解電腦科學的一些經典問題。
 
全書共9章,不僅介紹了遞迴、結果緩存和位元操作等基本程式設計組件,還講述了常見的搜索演算法、常見的圖演算法、神經網路、遺傳演算法、k均值聚類演算法、對抗搜索演算法等,運用了類型提示等Python高級特性,並通過各級方案、示例和習題展開具體實踐。

本書將電腦科學與應用程式、資料、性能等現實問題深度關聯,定位獨特,示例經典,適合有一定程式設計經驗的中高級Python程式師提升用Python解決實際問題的技術、程式設計和應用能力。


大衛·科派克(David Kopec)是香普蘭學院(Champlain College)的電腦科學與創新專業助理教授,該學院位於美國佛蒙特州的伯靈頓市。他是一位經驗豐富的軟體發展人員,也是Classic Computer Science Problems in Swift和Dart for Absolute Beginners的作者。他擁有達特茅斯學院(Dartmouth College)的經濟學學士學位和電腦科學碩士學位。


第1章 幾個小問題 1
1.1 斐波那契序列 1
1.1.1 嘗試次遞迴 1
1.1.2 基線條件的運用 3
1.1.3 用結果緩存來救場 4
1.1.4 自動化的結果緩存 5
1.1.5 簡潔至上的斐波那契 6
1.1.6 用生成器生成斐波那契數 7
1.2 簡單的壓縮演算法 7
1.3 牢不可破的加密方案 12
1.3.1 按順序讀取資料 12
1.3.2 加密和解密 13
1.4 計算15
1.5 漢諾塔15
1.5.1 對塔進行建模 16
1.5.2 求解漢諾塔問題 17
1.6 現實世界的應用 19
1.7 習題 20

第 2 章 搜索問題 21
2.1 DNA搜索 21
2.1.1 DNA的存儲方案 22
2.1.2 線性搜索 23
2.1.3 二分搜索 24
2.1.4 通用示例 26
2.2 求解迷宮問題 28
2.2.1 生成一個隨機迷宮 29
2.2.2 迷宮的其他函數 30
2.2.3 深度優先搜索 31
2.2.4 廣度優先搜索 35
2.2.5 A搜索 39
2.3 傳教士和食人族 44
2.3.1 表達問題 45
2.3.2 求解 47
2.4 現實世界的應用 48
2.5 習題 49

第3章 約束滿足問題 51
3.1 構建約束滿足問題的解決框架 52
3.2 澳大利亞地圖著色問題 55
3.3 八皇后問題 58
3.4 單詞搜索 60
3.5 字謎(SEND+MORE=MONEY) 63
3.6 電路板佈局 65
3.7 現實世界的應用 66
3.8 習題 67

第4章 圖問題 69
4.1 地圖就是圖 69
4.2 搭建圖的框架 71
4.3 查找短路徑 77
4.4 小化網路構建成本 79
4.4.1 權重的處理 79
4.4.2 查找小生成樹 83
4.5 在加權圖中查找短路徑 89
4.6 現實世界的應用 95
4.7 習題 96

第5章 遺傳演算法 97
5.1 生物學背景知識 97
5.2 通用的遺傳演算法 98
5.3 簡單測試 105
5.4 重新考慮SEND+MORE=MONEY問題 107
5.5 優化清單壓縮演算法 111
5.6 遺傳演算法面臨的挑戰 113
5.7 現實世界的應用 114
5.8 習題 115

第6章 k均值聚類 117
6.1 預備知識 117
6.2 k均值聚類演算法 119
6.3 按年齡和經度對州長進行聚類 124
6.4 按長度聚類邁克爾·傑克遜的專輯 128
6.5 k均值聚類演算法問題及其擴展 130
6.6 現實世界的應用 131
6.7 習題 131

第7章 十分簡單的神經網路 133
7.1 生物學基礎 133
7.2 人工神經網路 135
7.2.1 神經元 135
7.2.2 分層 136
7.2.3 反向傳播 137
7.2.4 全貌 139
7.3 預備知識 140
7.3.1 點積 140
7.3.2 啟動函數 140
7.4 構建神經網路 142
7.4.1 神經元的實現 142
7.4.2 層的實現 143
7.4.3 神經網路的實現 145
7.5 分類問題 148
7.5.1 數據的歸一化 148
7.5.2 經典的鳶尾花資料集 149
7.5.3 葡萄酒的分類 152
7.6 為神經網路提速 155
7.7 神經網路問題及其擴展 156
7.8 現實世界的應用 157
7.9 習題 157

第8章 對抗搜索 159
8.1 棋盤遊戲的基礎組件 159
8.2 井字棋 161
8.2.1 井字棋的狀態管理 161
8.2.2 極小化極大演算法 164
8.2.3 用井字棋測試極小化極大演算法 167
8.2.4 開發井字棋AI 168
8.3 四子棋 169
8.3.1 四子棋遊戲程式 170
8.3.2 四子棋AI 175
8.3.3 用α-β剪枝演算法優化極小化極大演算法 177
8.4 α-β剪枝效果的極小化極大演算法改進方案 178
8.5 現實世界的應用 179
8.6 習題 179

第9章 其他問題 181
9.1 背包問題 181
9.2 旅行商問題 186
9.2.1 樸素解法 186
9.2.2 進階 191
9.3 電話號碼助記符 191
9.4 現實世界的應用 193
9.5 習題 194
附錄A 術語表 195
附錄B 其他資料 201
附錄C 類型提示簡介 205


相關書籍