Python數(shù)據(jù)結(jié)構(gòu)與算法分析(第3版)
定 價(jià):99.8 元
- 作者:[美] 布拉德利·N. 米勒(Bradley N. Miller)[美] 戴維·L. 拉努姆(David L. Ranum)[烏] 羅曼·亞西諾夫斯基(Roman Yasinovskyy)
- 出版時(shí)間:2023/8/1
- ISBN:9787115623348
- 出 版 社:人民郵電出版社
- 中圖法分類(lèi):TP311.561
- 頁(yè)碼:304
- 紙張:
- 版次:02
- 開(kāi)本:16開(kāi)
了解數(shù)據(jù)結(jié)構(gòu)與算法是透徹理解計(jì)算機(jī)科學(xué)的前提。隨著Python日益廣泛的應(yīng)用,Python程序員需要實(shí)現(xiàn)與傳統(tǒng)的面向?qū)ο缶幊陶Z(yǔ)言相似的數(shù)據(jù)結(jié)構(gòu)與算法。本書(shū)是用Python描述數(shù)據(jù)結(jié)構(gòu)與算法的開(kāi)山之作,匯聚了作者多年的實(shí)戰(zhàn)經(jīng)驗(yàn),向讀者透徹講解在Python環(huán)境下,如何通過(guò)一系列存儲(chǔ)機(jī)制有效地實(shí)現(xiàn)各類(lèi)算法。通過(guò)本書(shū),讀者將深刻理解Python數(shù)據(jù)結(jié)構(gòu)、遞歸、搜索、排序、樹(shù)與圖的應(yīng)用,等等。這一版重寫(xiě)了書(shū)中的示例代碼,并對(duì)諸多內(nèi)容做了修正。
1.若把編寫(xiě)代碼比作行軍打仗,那么要想稱(chēng)霸沙場(chǎng),不能僅靠手中的利刃,還需深諳兵法。Python是一把利刃,數(shù)據(jù)結(jié)構(gòu)與算法則是兵法。只有熟讀兵法,才能使利刃所向披靡。
2.本書(shū)作者在計(jì)算機(jī)科學(xué)領(lǐng)域深耕數(shù)十載,積累了豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。通過(guò)學(xué)習(xí)本書(shū),你將掌握數(shù)據(jù)結(jié)構(gòu)與算法的基本思想,從而有信心探索任何編程難題的解決方法。
3.內(nèi)容系統(tǒng)完善,邏輯清晰。不僅能讓你學(xué)會(huì)用Python實(shí)現(xiàn)棧、隊(duì)列、列表等數(shù)據(jù)結(jié)構(gòu),掌握大O記法和時(shí)間復(fù)雜度等概念,利用遞歸解決漢諾塔問(wèn)題,還能實(shí)現(xiàn)常用的搜索算法和排序算法,并分析性能,掌握樹(shù)與圖在Python中的應(yīng)用。
4.與第2版相比,第3版不僅對(duì)過(guò)時(shí)的內(nèi)容進(jìn)行了更新,還采用了PEP 8 Python編程規(guī)范,并對(duì)代碼進(jìn)行了重寫(xiě),引入了pythonds3包等。
[美] 布拉德利·N. 米勒(Bradley N. Miller)美國(guó)路德學(xué)院計(jì)算機(jī)科學(xué)名譽(yù)教授,曾獲美國(guó)計(jì)算機(jī)協(xié)會(huì)軟件系統(tǒng)獎(jiǎng),對(duì)Python課程開(kāi)發(fā)有深入研究,由他創(chuàng)立的互動(dòng)式教科書(shū)平臺(tái)Runestone Interactive與全球600多家教育機(jī)構(gòu)有合作。
[美] 戴維·L. 拉努姆(David L. Ranum)
Merative高級(jí)科學(xué)家,醫(yī)學(xué)信息學(xué)博士,致力于利用自然語(yǔ)言處理等人工智能技術(shù)解決醫(yī)療問(wèn)題,曾在美國(guó)路德學(xué)院講授計(jì)算機(jī)科學(xué)課程近三十載。
[烏] 羅曼·亞西諾夫斯基(Roman Yasinovskyy)
美國(guó)路德學(xué)院計(jì)算機(jī)科學(xué)系主任、副教授,授課范圍涵蓋算法、Web開(kāi)發(fā)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)管理系統(tǒng)、操作系統(tǒng)、計(jì)算機(jī)體系結(jié)構(gòu)以及信息安全等課程。博士畢業(yè)于陶森大學(xué)應(yīng)用信息技術(shù)專(zhuān)業(yè)。
前言 iii
第 1章 導(dǎo)論 1
1.1 本章目標(biāo) 1
1.2 入門(mén) 1
1.3 何謂計(jì)算機(jī)科學(xué) 1
1.3.1 何謂編程 3
1.3.2 為何學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)及抽象數(shù)據(jù)類(lèi)型 4
1.3.3 為何學(xué)習(xí)算法 5
1.4 Python基礎(chǔ) 5
1.4.1 數(shù)據(jù) 6
1.4.2 輸入與輸出 16
1.4.3 控制結(jié)構(gòu) 20
1.4.4 異常處理 23
1.4.5 定義函數(shù) 25
1.4.6 Python面向?qū)ο缶幊蹋憾x類(lèi) 26
1.5 小結(jié) 39
1.6 關(guān)鍵術(shù)語(yǔ) 40
1.7 練習(xí) 40
第 2章 算法分析 42
2.1 本章目標(biāo) 42
2.2 何謂算法分析 42
2.2.1 大O記法 45
2.2.2 異序詞檢測(cè)示例 48
2.3 Python數(shù)據(jù)結(jié)構(gòu)的性能 51
2.3.1 列表 51
2.3.2 字典 56
2.4 小結(jié) 57
2.5 關(guān)鍵術(shù)語(yǔ) 57
2.6 練習(xí) 58
第3章 基本數(shù)據(jù)結(jié)構(gòu) 59
3.1 本章目標(biāo) 59
3.2 何謂線性數(shù)據(jù)結(jié)構(gòu) 59
3.3 棧 60
3.3.1 棧抽象數(shù)據(jù)類(lèi)型 61
3.3.2 用Python實(shí)現(xiàn)棧 62
3.3.3 匹配括號(hào) 64
3.3.4 通用問(wèn)題:符號(hào)匹配 66
3.3.5 將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù) 67
3.3.6 前序、中序和后序表達(dá)式 69
3.4 隊(duì)列 77
3.4.1 隊(duì)列抽象數(shù)據(jù)類(lèi)型 78
3.4.2 用Python實(shí)現(xiàn)隊(duì)列 78
3.4.3 隊(duì)列模擬:傳土豆 80
3.4.4 隊(duì)列模擬:打印任務(wù) 81
3.4.5 雙端隊(duì)列 87
3.5 雙端隊(duì)列抽象數(shù)據(jù)類(lèi)型 87
3.5.1 用Python實(shí)現(xiàn)雙端隊(duì)列 88
3.5.2 回文檢測(cè)器 89
3.6 列表 91
3.6.1 無(wú)序列表抽象數(shù)據(jù)類(lèi)型 91
3.6.2 實(shí)現(xiàn)無(wú)序列表:鏈表 92
3.6.3 有序列表抽象數(shù)據(jù)類(lèi)型 100
3.6.4 實(shí)現(xiàn)有序列表 101
3.7 小結(jié) 104
3.8 關(guān)鍵術(shù)語(yǔ) 104
3.9 練習(xí) 105
第4章 遞歸 108
4.1 本章目標(biāo) 108
4.2 何謂遞歸 108
4.2.1 計(jì)算一列數(shù)之和 108
4.2.2 遞歸三原則 111
4.2.3 將整數(shù)轉(zhuǎn)換成任意進(jìn)制的字符串 111
4.3 棧幀:實(shí)現(xiàn)遞歸 113
4.4 可視化遞歸 115
4.5 復(fù)雜的遞歸問(wèn)題 120
4.6 探索迷宮 123
4.7 動(dòng)態(tài)規(guī)劃 128
4.8 小結(jié) 134
4.9 關(guān)鍵術(shù)語(yǔ) 134
4.10 練習(xí) 134
第5章 搜索和排序 137
5.1 本章目標(biāo) 137
5.2 搜索 137
5.2.1 順序搜索 137
5.2.2 二分搜索 140
5.2.3 散列 142
5.3 排序 151
5.3.1 冒泡排序 151
5.3.2 選擇排序 154
5.3.3 插入排序 156
5.3.4 希爾排序 158
5.3.5 歸并排序 160
5.3.6 快速排序 163
5.4 小結(jié) 166
5.5 關(guān)鍵術(shù)語(yǔ) 167
5.6 練習(xí) 167
第6章 樹(shù)及其算法 170
6.1 本章目標(biāo) 170
6.2 示例 170
6.3 術(shù)語(yǔ)及定義 173
6.4 實(shí)現(xiàn) 175
6.4.1 列表之列表 175
6.4.2 節(jié)點(diǎn)與引用 178
6.5 二叉樹(shù)的應(yīng)用 180
6.5.1 解析樹(shù) 180
6.5.2 樹(shù)的遍歷 186
6.6 利用二叉堆實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列 190
6.6.1 二叉堆的操作 190
6.6.2 二叉堆的實(shí)現(xiàn) 191
6.7 二叉搜索樹(shù) 198
6.7.1 搜索樹(shù)的操作 198
6.7.2 搜索樹(shù)的實(shí)現(xiàn) 198
6.7.3 搜索樹(shù)的分析 209
6.8 平衡二叉搜索樹(shù) 210
6.8.1 AVL樹(shù)的性能 211
6.8.2 AVL樹(shù)的實(shí)現(xiàn) 212
6.8.3 映射實(shí)現(xiàn)總結(jié) 219
6.9 小結(jié) 219
6.10 關(guān)鍵術(shù)語(yǔ) 219
6.11 練習(xí) 220
第7章 圖及其算法 223
7.1 本章目標(biāo) 223
7.2 術(shù)語(yǔ)及定義 224
7.3 圖的抽象數(shù)據(jù)類(lèi)型 225
7.3.1 鄰接矩陣 226
7.3.2 鄰接表 227
7.3.3 實(shí)現(xiàn) 227
7.4 廣度優(yōu)先搜索 230
7.4.1 詞梯問(wèn)題 230
7.4.2 構(gòu)建詞梯圖 230
7.4.3 實(shí)現(xiàn)廣度優(yōu)先搜索 232
7.4.4 分析廣度優(yōu)先搜索 235
7.5 深度優(yōu)先搜索 236
7.5.1 騎士周游問(wèn)題 236
7.5.2 構(gòu)建騎士周游圖 236
7.5.3 實(shí)現(xiàn)騎士周游 238
7.5.4 分析騎士周游 241
7.5.5 通用深度優(yōu)先搜索 242
7.5.6 分析深度優(yōu)先搜索 245
7.6 拓?fù)渑判? 246
7.7 強(qiáng)連通分量 247
7.8 最短路徑問(wèn)題 250
7.8.1 Dijkstra算法 252
7.8.2 分析Dijkstra算法 254
7.8.3 Prim算法 254
7.9 小結(jié) 258
7.10 關(guān)鍵術(shù)語(yǔ) 259
7.11 練習(xí) 259
第8章 進(jìn)階算法 261
8.1 本章目標(biāo) 261
8.2 復(fù)習(xí)Python列表 261
8.3 復(fù)習(xí)遞歸 266
8.3.1 同余定理 267
8.3.2 冪剩余 267
8.3.3 最大公因數(shù)與逆元 268
8.3.4 RSA算法 271
8.4 復(fù)習(xí)字典:跳表 275
8.4.1 映射抽象數(shù)據(jù)類(lèi)型 276
8.4.2 用Python實(shí)現(xiàn)字典 276
8.5 復(fù)習(xí)樹(shù):量化圖片 285
8.5.1 數(shù)字圖像概述 285
8.5.2 量化圖片 286
8.5.3 使用八叉樹(shù)改進(jìn)量化算法 288
8.6 復(fù)習(xí)圖:模式匹配 296
8.6.1 生物學(xué)字符串 296
8.6.2 簡(jiǎn)單比較 297
8.6.3 圖算法:DFA 298
8.6.4 圖算法:KMP 300
8.7 小結(jié) 302
8.8 關(guān)鍵術(shù)語(yǔ) 303
8.9 練習(xí) 303
參考資料 305
版權(quán)聲明 306