數(shù)據(jù)結(jié)構(gòu)與算法:Python語言實(shí)現(xiàn)
定 價(jià):109 元
叢書名:華章教育
當(dāng)前圖書已被 15 所學(xué)校薦購過!
查看明細(xì)
- 作者:[美] 邁克爾,T.,古德里奇(Michael,T.,Goodrich) ... 著,張曉 趙曉南等譯 譯
- 出版時(shí)間:2018/9/1
- ISBN:9787111606604
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.12
- 頁碼:492
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書采用Python語言介紹數(shù)據(jù)結(jié)構(gòu)和算法,包括其設(shè)計(jì)、分析和實(shí)施。本書源代碼簡潔、明確,面向?qū)ο蟮挠^點(diǎn)貫穿始終,通過繼承大限度地提高代碼重用,同時(shí)彰顯不同抽象數(shù)據(jù)類型和算法之間的異同。
高效數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)與分析,長期以來一直被認(rèn)為是計(jì)算領(lǐng)域的一個(gè)重要主題,同時(shí)也是計(jì)算機(jī)科學(xué)與計(jì)算機(jī)工程本科教學(xué)中的核心課程。本書介紹數(shù)據(jù)結(jié)構(gòu)和算法,包括其設(shè)計(jì)、分析和實(shí)現(xiàn),可在初級數(shù)據(jù)結(jié)構(gòu)或中級算法導(dǎo)論課程中使用。我們隨后會(huì)更詳細(xì)地討論如何在這些課程中使用本書。
為了提高軟件開發(fā)的健壯性和可重用性,我們在本書中采取一致的面向?qū)ο蟮囊暯。面向(qū)ο蠓椒ǖ囊粋(gè)主要思想是數(shù)據(jù)應(yīng)該被封裝,然后提供訪問和修改它們的方法。我們不能簡單地將數(shù)據(jù)看作字節(jié)和地址的集合,數(shù)據(jù)對象是抽象數(shù)據(jù)類型(Abstract Data Type,ADT)的實(shí)例,其中包括可在這種類型的數(shù)據(jù)對象上執(zhí)行的操作方法的集合。我們強(qiáng)調(diào)的是對于一個(gè)特定的ADT可能有幾種不同的實(shí)現(xiàn)策略,并探討這些選擇的優(yōu)點(diǎn)和缺點(diǎn)。我們幾乎為書中的所有數(shù)據(jù)結(jié)構(gòu)和算法都提供了完整的Python實(shí)現(xiàn),并介紹了將這些實(shí)現(xiàn)組織為可重用的組件所需的重要的面向?qū)ο笤O(shè)計(jì)模式。
通過閱讀本書,讀者可以:
對常見數(shù)據(jù)集合的抽象有一定了解(如棧、隊(duì)列、表、樹、圖)。
理解生成常用數(shù)據(jù)結(jié)構(gòu)的高效實(shí)現(xiàn)的算法策略。
通過理論方法和實(shí)驗(yàn)方法分析算法的性能,并了解競爭策略之間的權(quán)衡。
明智地利用編程語言庫中已有的數(shù)據(jù)結(jié)構(gòu)和算法。
擁有大多數(shù)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的具體實(shí)現(xiàn)經(jīng)驗(yàn)。
應(yīng)用數(shù)據(jù)結(jié)構(gòu)和算法來解決復(fù)雜的問題。
為了達(dá)到最后一個(gè)目標(biāo),我們在書中提供了數(shù)據(jù)結(jié)構(gòu)的很多應(yīng)用實(shí)例,包括:文本處理系統(tǒng),結(jié)構(gòu)化格式(如HTML)的標(biāo)簽匹配,簡單的密碼技術(shù),文字頻率分析,自動(dòng)幾何布局,霍夫曼編碼,DNA序列比對,以及搜索引擎索引。
本書特色
本書主要基于由Goodrich和Tamassia所著的《Data Structures and Algorithms in Java》,以及由Goodrich、Tamassia和Mount所著的《Data Structures and Algorithms in C++》編寫而成。然而,我們并不是簡單地用Python語言實(shí)現(xiàn)以上書籍的內(nèi)容。為了充實(shí)內(nèi)容,我們重新設(shè)計(jì)了本書:
對全部代碼進(jìn)行了重新設(shè)計(jì),以充分利用Python的優(yōu)勢,如使用生成器迭代集合的元素。
在Java和C++版本中,我們提供了很多偽代碼,而本書則提供了Python實(shí)現(xiàn)的完整代碼。
在一般情況下,ADT被定義為與Python內(nèi)建數(shù)據(jù)類型和Python的collections模塊具有一致的接口。
第5章深入探討了Python中基于動(dòng)態(tài)數(shù)組的內(nèi)置數(shù)據(jù)結(jié)構(gòu),如list、tuple和str類。新增的附錄A提供了關(guān)于str類功能的進(jìn)一步講解。
重新繪制或修改了超過450幅插圖。
經(jīng)過新增和修訂,練習(xí)的總數(shù)達(dá)到750個(gè)。
在線資源
本書提供一系列豐富的在線資源,可訪問以下網(wǎng)站獲取:
www.wiley.com/college/goodrich
鼓勵(lì)學(xué)生在學(xué)習(xí)本書時(shí)使用這個(gè)網(wǎng)址,以更有效地進(jìn)行練習(xí)并提高對所學(xué)知識的認(rèn)識。也歡迎教師使用本網(wǎng)站來幫助規(guī)劃、組織和展示他們的課程材料。對于教師和學(xué)生而言,網(wǎng)站中包含一系列與本書主題相關(guān)的教學(xué)資源,由于它們是有附加價(jià)值的,所以一些網(wǎng)上資源受密碼保護(hù)。
對于所有的讀者,尤其是學(xué)生,我們有以下資源:
書中所有Python程序的源代碼。
提供給教師的PDF講義版PPT(每頁四張)。
保存所有練習(xí)提示的數(shù)據(jù)庫,以練習(xí)的編號為索引。
對于使用本書的教師,我們有以下額外的教學(xué)輔助資源:
本書練習(xí)的答案。
書中所有圖形和插圖的彩色版本。
PPT和PDF版本的幻燈片,其中PDF版本為每頁一張。
PPT是完全可編輯的,教師可根據(jù)自己的課程需求進(jìn)行修改。在教師使用本書作為教材時(shí),所有的在線資源不收取額外費(fèi)用。
內(nèi)容和組織
書中各章節(jié)的內(nèi)容循序漸進(jìn),適于教學(xué)。從Python編程和面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)開始,然后逐漸增加如算法分析和遞歸之類的基礎(chǔ)技術(shù)。在本書的主體部分中,我們展示了基本的數(shù)據(jù)結(jié)構(gòu)和算法,并且包括對內(nèi)存管理的討論(也是數(shù)據(jù)結(jié)構(gòu)的架構(gòu)基礎(chǔ))。本書的章節(jié)安排如下:
第1章 Python入門
第2章 面向?qū)ο缶幊?
第3章 算法分析
第4章 遞歸
第5章 基于數(shù)組的序列
第6章 棧、隊(duì)列和雙端隊(duì)列
第7章 鏈表
第8章 樹
第9章 優(yōu)先級隊(duì)列
第10章 映射、哈希表和跳躍表
第11章 搜索樹
第12章 排序與選擇
第13章 文本處理
第14章 圖算法
第15章 內(nèi)存管理和B樹
附錄A Python中的字符串
附錄B 有用的數(shù)學(xué)定理
預(yù)備知識
我們假設(shè)讀者至少接觸過一種高級語言,如C、C++、Python或Java,可以理解相關(guān)高級語言的主要概念,包括:
變量和表達(dá)式。
決策結(jié)構(gòu)(if語句和switch語句)。
迭代結(jié)構(gòu)(for循環(huán)和while循環(huán))。
函數(shù)(無論是過程式方法還是面向?qū)ο蠓椒ǎ?
對于已經(jīng)熟悉這些概念但還不清楚如何在Python中應(yīng)用的讀者,我們建議將第1章作為Python語言的入門。這本書主要討論數(shù)據(jù)結(jié)構(gòu),而不是講解Python,因此并沒有詳盡介紹Python。
直到第2章才開始使用Python中的面向?qū)ο缶幊,這一章對于那些Python新手以及熟悉Python但不熟悉面向?qū)ο缶幊痰娜硕际怯杏玫摹?
就數(shù)學(xué)背景而言,我們假定讀者多少熟悉些高中數(shù)學(xué)知識。即便如此,在第3章中,我們先討論了算法分析的7個(gè)最重要的功能。若所涉及的內(nèi)容超出了這7個(gè)功能,則作為可選章節(jié),用星號(*)標(biāo)記。附錄B對其他有用的數(shù)學(xué)定理做了總結(jié),包括初等概率等。
計(jì)算機(jī)科學(xué)課程的設(shè)計(jì)
為了幫助教師在IEEE/ACM 2013的框架下設(shè)計(jì)教學(xué)課程,下表描述了本書涵蓋的知識要點(diǎn)。
知識要點(diǎn) 相關(guān)章節(jié)
AL/基本分析 第3章,4.2節(jié),12.2.4節(jié)
AL/算法策略 12.2.1節(jié),13.2.1節(jié),13.3節(jié),13.4.2節(jié)
AL/基本數(shù)據(jù)結(jié)構(gòu)與算法 4.1.3節(jié),5.5.2節(jié),9.4.1節(jié),9.3節(jié),10.2節(jié),11.1節(jié),13.2節(jié),第12章,第14章的大部分內(nèi)容
AL/高級數(shù)據(jù)結(jié)構(gòu) 5.3節(jié),10.4節(jié),11.2~11.6節(jié),12.3.1節(jié),13.5節(jié),14.5節(jié),15.3節(jié)
AR/內(nèi)存系統(tǒng)組織和架構(gòu) 第15章
DS/集合、關(guān)系和功能 10.5.1節(jié),10.5.2節(jié),9.4節(jié)
DS/證明技巧 3.4節(jié),4.2節(jié),5.3.2節(jié),9.3.6節(jié),12.4.1節(jié)
DS/基礎(chǔ)計(jì)數(shù) 2.4.2節(jié),6.2.2節(jié),12.2.4節(jié),8.2.2節(jié),附錄B
DS/圖和樹 第8章和第14章的大部分內(nèi)容
DS/離散概率 1.11節(jié),10.2節(jié),10.4.2節(jié),12.3.1節(jié)
PL/面向?qū)ο缶幊?本書的大部分內(nèi)容,特別是第2章以及7.4節(jié)、9.5.1節(jié)、10.1.3節(jié)和11.2節(jié)
PL/函數(shù)式編程 1.10節(jié)
SDF/算法和設(shè)計(jì) 2.1節(jié),3.3節(jié),12.2.1節(jié)
SDF/基本編程概念 第1章,第4章
SDF/基本數(shù)據(jù)結(jié)構(gòu) 第6章,第7章,附錄A,1.2.1節(jié),5.2節(jié),5.4節(jié),9.1節(jié),10.1節(jié)
SDF/開發(fā)方法 1.7節(jié),2.2節(jié)
SE/軟件設(shè)計(jì) 2.1節(jié),2.1.3節(jié)
邁克爾·T. 古德里奇(Michael T. Goodrich) 加州大學(xué)歐文分校計(jì)算機(jī)科學(xué)系教授,之前是約翰·霍普金斯大學(xué)教授。他是AAAS、ACM和IEEE會(huì)士,曾榮獲IEEE計(jì)算機(jī)協(xié)會(huì)技術(shù)成就獎(jiǎng)和ACM卓越服務(wù)獎(jiǎng)等。
羅伯托·塔馬西亞(Roberto Tamassia) 布朗大學(xué)計(jì)算機(jī)科學(xué)系教授及系主任,兼任幾何計(jì)算中心主任。他是AAAS、ACM和IEEE會(huì)士,曾榮獲IEEE計(jì)算機(jī)協(xié)會(huì)技術(shù)成就獎(jiǎng)。
邁克爾·H.戈德瓦瑟(Michael H. Goldwasser) 圣路易斯大學(xué)數(shù)學(xué)系和計(jì)算機(jī)科學(xué)系教授,兼任計(jì)算機(jī)科學(xué)項(xiàng)目主任,之前曾在芝加哥羅耀拉大學(xué)任教。
出版者的話
譯者序
前言
致謝
作者簡介
第1章 Python入門 1
1.1 Python概述 1
1.1.1 Python解釋器 1
1.1.2 Python程序預(yù)覽 1
1.2 Python對象 2
1.2.1 標(biāo)識符、對象和賦值語句 2
1.2.2 創(chuàng)建和使用對象 4
1.2.3 Python的內(nèi)置類 4
1.3 表達(dá)式、運(yùn)算符和優(yōu)先級 8
1.4 控制流程 12
1.4.1 條件語句 12
1.4.2 循環(huán)語句 14
1.5 函數(shù) 16
1.5.1 信息傳遞 17
1.5.2 Python的內(nèi)置函數(shù) 19
1.6 簡單的輸入和輸出 20
1.6.1 控制臺(tái)輸入和輸出 21
1.6.2 文件 21
1.7 異常處理 22
1.7.1 拋出異常 23
1.7.2 捕捉異常 24
1.8 迭代器和生成器 26
1.9 Python的其他便利特點(diǎn) 28
1.9.1 條件表達(dá)式 29
1.9.2 解析語法 29
1.9.3 序列類型的打包和解包 30
1.10 作用域和命名空間 31
1.11 模塊和import語句 32
1.12 練習(xí) 34
擴(kuò)展閱讀 36
第2章 面向?qū)ο缶幊?37
2.1 目標(biāo)、原則和模式 37
2.1.1 面向?qū)ο蟮脑O(shè)計(jì)目標(biāo) 37
2.1.2 面向?qū)ο蟮脑O(shè)計(jì)原則 38
2.1.3 設(shè)計(jì)模式 39
2.2 軟件開發(fā) 40
2.2.1 設(shè)計(jì) 40
2.2.2 偽代碼 41
2.2.3 編碼風(fēng)格和文檔 42
2.2.4 測試和調(diào)試 43
2.3 類定義 44
2.3.1 例子:CreditCard類 45
2.3.2 運(yùn)算符重載和Python的特殊方法 48
2.3.3 例子:多維向量類 50
2.3.4 迭代器 51
2.3.5 例子:Range類 52
2.4 繼承 53
2.4.1 擴(kuò)展CreditCard類 54
2.4.2 數(shù)列的層次圖 57
2.4.3 抽象基類 60
2.5 命名空間和面向?qū)ο?62
2.5.1 實(shí)例和類命名空間 62
2.5.2 名稱解析和動(dòng)態(tài)調(diào)度 65
2.6 深拷貝和淺拷貝 65
2.7 練習(xí) 67
擴(kuò)展閱讀 70
第3章 算法分析 71
3.1 實(shí)驗(yàn)研究 71
3.2 本書使用的7種函數(shù) 74
3.2.1 常數(shù)函數(shù) 74
3.2.2 對數(shù)函數(shù) 74
3.2.3 線性函數(shù) 75
3.2.4 n-log-n函數(shù) 75
3.2.5 二次函數(shù) 76
3.2.6 三次函數(shù)和其他多項(xiàng)式 77
3.2.7 指數(shù)函數(shù) 77
3.2.8 比較增長率 79
3.3 漸近分析 79
3.3.1 大O符號 80
3.3.2 比較分析 82
3.3.3 算法分析示例 84
3.4 簡單的證明技術(shù) 89
3.4.1 示例 89
3.4.2 反證法 89
3.4.3 歸納和循環(huán)不變量 90
3.5 練習(xí) 91
擴(kuò)展閱讀 95
第4章 遞歸 96
4.1 說明性的例子 96
4.1.1 階乘函數(shù) 96
4.1.2 繪制英式標(biāo)尺 97
4.1.3 二分查找 99
4.1.4 文件系統(tǒng) 101
4.2 分析遞歸算法 104
4.3 遞歸算法的不足 106
4.4 遞歸的其他例子 109
4.4.1 線性遞歸 109
4.4.2 二路遞歸 112
4.4.3 多重遞歸 113
4.5 設(shè)計(jì)遞歸算法 114
4.6 消除尾遞歸 115
4.7 練習(xí) 116
擴(kuò)展閱讀 118
第5章 基于數(shù)組的序列 119
5.1 Python序列類型 119
5.2 低層次數(shù)組 119
5.2.1 引用數(shù)組 121
5.2.2 Python中的緊湊數(shù)組 122
5.3 動(dòng)態(tài)數(shù)組和攤銷 124
5.3.1 實(shí)現(xiàn)動(dòng)態(tài)數(shù)組 126
5.3.2 動(dòng)態(tài)數(shù)組的攤銷分析 127
5.3.3 Python列表類 130
5.4 Python序列類型的效率 130
5.4.1 Python的列表和元組類 130
5.4.2 Python的字符串類 134
5.5 使用基于數(shù)組的序列 136
5.5.1 為游戲存儲(chǔ)高分 136
5.5.2 為序列排序 138
5.5.3 簡單密碼技術(shù) 140
5.6 多維數(shù)據(jù)集 142
5.7 練習(xí) 145
擴(kuò)展閱讀 147
第6章 棧、隊(duì)列和雙端隊(duì)列 148
6.1 棧 148
6.1.1 棧的抽象數(shù)據(jù)類型 148
6.1.2 簡單的基于數(shù)組的棧實(shí)現(xiàn) 149
6.1.3 使用棧實(shí)現(xiàn)數(shù)據(jù)的逆置 152
6.1.4 括號和HTML標(biāo)記匹配 152
6.2 隊(duì)列 155
6.2.1 隊(duì)列的抽象數(shù)據(jù)類型 155
6.2.2 基于數(shù)組的隊(duì)列實(shí)現(xiàn) 156
6.3 雙端隊(duì)列 160
6.3.1 雙端隊(duì)列的抽象數(shù)據(jù)類型 160
6.3.2 使用環(huán)形數(shù)組實(shí)現(xiàn)雙端隊(duì)列 161
6.3.3 Python collections模塊中的雙端隊(duì)列 162
6.4 練習(xí) 163
擴(kuò)展閱讀 165
第7章 鏈表 166
7.1 單向鏈表 166
7.1.1 用單向鏈表實(shí)現(xiàn)棧 169
7.1.2 用單向鏈表實(shí)現(xiàn)隊(duì)列 171
7.2 循環(huán)鏈表 173
7.2.1 輪轉(zhuǎn)調(diào)度 173
7.2.2 用循環(huán)鏈表實(shí)現(xiàn)隊(duì)列 174
7.3 雙向鏈表 175
7.3.1 雙向鏈表的基本實(shí)現(xiàn) 177
7.3.2 用雙向鏈表實(shí)現(xiàn)雙端隊(duì)列 179
7.4 位置列表的抽象數(shù)據(jù)類型 180
7.4.1 含位置信息的列表抽象數(shù)據(jù)類型 182
7.4.2 雙向鏈表實(shí)現(xiàn) 183
7.5 位置列表的排序 186
7.6 案例研究:維護(hù)訪問頻率 186
7.6.1 使用有序表 187
7.6.2 啟發(fā)式動(dòng)態(tài)調(diào)整列表 188
7.7 基于鏈接的序列與基于數(shù)組的序列 190
7.8 練習(xí) 192
擴(kuò)展閱讀 195
第8章 樹 196
8.1 樹的基本概念 196
8.1.1 樹的定義和屬性 196
8.1.2 樹的抽象數(shù)據(jù)類型 199
8.1.3 計(jì)算深度和高度 201
8.2 二叉樹 203
8.2.1 二叉樹的抽象數(shù)據(jù)類型 204
8.2.2 二叉樹的屬性 206
8.3 樹的實(shí)現(xiàn) 207
8.3.1 二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 207
8.3.2 基于數(shù)組表示的二叉樹 212
8.3.3 一般樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 214
8.4 樹的遍歷算法 214
8.4.1 樹的先序和后序遍歷 214
8.4.2 樹的廣度優(yōu)先遍歷 216
8.4.3 二叉樹的中