《Python 數(shù)據(jù)結(jié)構(gòu)與算法(第 3 版)》是一本面向初級及中級 Python 開發(fā)者與學(xué)生的專業(yè)技術(shù)書籍,聚焦數(shù)據(jù)結(jié)構(gòu)與算法在 Python 中的實戰(zhàn)應(yīng)用。書中系統(tǒng)介紹了 Python 基礎(chǔ)數(shù)據(jù)類型(如數(shù)值、布爾、序列、字典、集合)及集合模塊(命名元組、雙端隊列等),深入解析鏈表、棧、隊列、樹、堆、哈希表、圖等核心數(shù)據(jù)結(jié)構(gòu)的原理與實現(xiàn),并涵蓋冒泡排序、快速排序、二分搜索、KMP 算法等經(jīng)典算法的原理、Python 代碼實現(xiàn)及性能分析。
全書以 理論 案例 實操 為框架:通過對比數(shù)組與鏈表的特性、演示樹的遍歷邏輯、圖解圖的最小生成樹算法等,幫助讀者理解復(fù)雜概念;結(jié)合動態(tài)規(guī)劃、分治法、貪婪算法等設(shè)計范式,解析算法優(yōu)化思路;穿插字符串匹配、優(yōu)先級管理等實際場景案例,展現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法在提升應(yīng)用程序性能、處理大規(guī)模數(shù)據(jù)中的關(guān)鍵作用。此外,書中提供各章練習(xí)答案,并附贈樹算法擴展內(nèi)容(可通過鏈接下載),助力讀者鞏固知識、深化實踐。
無論是零基礎(chǔ)入門數(shù)據(jù)結(jié)構(gòu),還是進(jìn)階優(yōu)化算法設(shè)計,本書均以簡明的步驟說明與豐富的代碼示例,幫助讀者掌握高效存儲數(shù)據(jù)、設(shè)計可擴展程序的核心能力,適用于軟件開發(fā)、算法課程學(xué)習(xí)及技術(shù)提升等場景。
《Python 數(shù)據(jù)結(jié)構(gòu)與算法(第 3 版)》 從入門到實戰(zhàn),解鎖高效編程的底層邏輯!
還在為復(fù)雜數(shù)據(jù)處理效率發(fā)愁?想掌握大廠的算法思維?這本書就是你的通關(guān)密鑰!
?為什么選擇這本書?
?零基礎(chǔ)友好,系統(tǒng)構(gòu)建知識體系:從 Python 基礎(chǔ)數(shù)據(jù)類型到鏈表、樹、圖等復(fù)雜結(jié)構(gòu),從冒泡排序到 KMP 算法,由淺入深拆解核心概念,搭配「文字講解 圖形示例 代碼實戰(zhàn)」三維解析,即使是新手也能輕松理解算法邏輯與數(shù)據(jù)結(jié)構(gòu)設(shè)計原理。
?聚焦實戰(zhàn),拒絕紙上談兵:每章配備真實場景案例(如棧在表達(dá)式求值中的應(yīng)用、圖算法在路徑規(guī)劃中的實踐),結(jié)合 Python 3.10 代碼實現(xiàn),直接套用解決業(yè)務(wù)問題。書中更提供可運行的代碼片段和練習(xí)答案,邊學(xué)邊練,快速積累項目經(jīng)驗。
?覆蓋大廠高頻考點,助力職業(yè)進(jìn)階:深度解析動態(tài)規(guī)劃、分治法、貪婪算法等大廠面試必問的設(shè)計范式,詳解排序、搜索、字符串匹配等核心算法的時間空間復(fù)雜度,幫你突破「算法難」瓶頸,從容應(yīng)對技術(shù)面試。
?附贈資源,拓展學(xué)習(xí)邊界:免費獲取樹算法擴展內(nèi)容,結(jié)合書中對哈希表沖突解決、圖的最小生成樹等進(jìn)階內(nèi)容的剖析,一站式掌握從基礎(chǔ)到高級的全鏈路知識,滿足開發(fā)、算法優(yōu)化、大規(guī)模應(yīng)用設(shè)計等多元需求。
?適合誰讀?
?? 想系統(tǒng)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的 Python 開發(fā)者(初 / 中級)
?? 計算機專業(yè)學(xué)生、算法課程學(xué)習(xí)者
?? 需優(yōu)化程序性能、設(shè)計高效數(shù)據(jù)存儲方案的技術(shù)從業(yè)者
?? 準(zhǔn)備技術(shù)面試、希望提升算法思維的求職者
?你的收獲將遠(yuǎn)超預(yù)期:
掌握 20 種數(shù)據(jù)結(jié)構(gòu)與 30 經(jīng)典算法的原理與實現(xiàn)
學(xué)會用復(fù)雜度分析優(yōu)化代碼,提升程序運行效率
建立「數(shù)據(jù)建模 算法設(shè)計」的工程思維,應(yīng)對真實業(yè)務(wù)場景
解鎖大廠技術(shù)面試核心考點,鋪平職業(yè)晉升之路
?現(xiàn)在翻開本書,你將發(fā)現(xiàn):
數(shù)據(jù)結(jié)構(gòu)不再是抽象概念,而是解決問題的鋒利工具;算法不再是天書,而是邏輯清晰的代碼脈絡(luò)。從夯實基礎(chǔ)到挑戰(zhàn)進(jìn)階,這本書將陪伴你跨越「會寫代碼」到「寫好代碼」的鴻溝,讓每一行代碼都閃耀著效率與優(yōu)雅的光芒!
?立即加入學(xué)習(xí),讓數(shù)據(jù)結(jié)構(gòu)與算法成為你的編程「加速器」!
數(shù)據(jù)結(jié)構(gòu)在應(yīng)用程序存儲和組織數(shù)據(jù)方面起著至關(guān)重要的作用。選擇正確的數(shù)據(jù)結(jié)構(gòu)對于顯著提高應(yīng)用程序的性能至關(guān)重要,因為隨著數(shù)據(jù)量的增加,我們希望能夠擴展應(yīng)用程序。本書將向你介紹基本的Python數(shù)據(jù)結(jié)構(gòu)以及用于構(gòu)造簡單、可維護(hù)的應(yīng)用程序的最常見和最重要的算法。它還允許你通過工作示例和易于遵循的分步說明來實現(xiàn)這些算法。
在本書中,你將學(xué)習(xí)基本的Python數(shù)據(jù)結(jié)構(gòu)和最常見的算法。通過這本書,你將學(xué)習(xí)如何創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如鏈表、棧、堆、隊列、樹和圖,以及排序算法,包括冒泡排序、插入排序、堆排序和快速排序。本書還描述了各種選擇算法,如隨機選擇和確定性選擇,并詳細(xì)討論了各種數(shù)據(jù)結(jié)構(gòu)算法和設(shè)計范例,如貪婪算法、分治法和動態(tài)規(guī)劃。此外,通過簡單的圖形示例解釋了復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如樹和圖,以理解這些有用的數(shù)據(jù)結(jié)構(gòu)的概念。通過本書還可以學(xué)習(xí)各種重要的字符串處理和模式匹配算法,如KMP算法和BoyerMoore算法,以及它們在Python中的簡單實現(xiàn)。
讀者對象
本書適用于初級或中級水平的Python開發(fā)人員,因為各章均提供了實際示例和簡單方法來理解復(fù)雜算法。對于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法課程的學(xué)生也可能有用,因為它幾乎涵蓋了所研究的所有算法、概念和設(shè)計。本書還適用于希望部署大規(guī)模應(yīng)用程序的軟件開發(fā)人員,因為本書提供了存儲相關(guān)數(shù)據(jù)的有效方法。
涵蓋的內(nèi)容
第1章Python數(shù)據(jù)類型與結(jié)構(gòu),介紹了Python中基本的數(shù)據(jù)類型和結(jié)構(gòu)。本章概述了Python中可用的幾種內(nèi)置數(shù)據(jù)結(jié)構(gòu),這對于理解數(shù)據(jù)結(jié)構(gòu)的內(nèi)部機制至關(guān)重要。
第2章算法設(shè)計導(dǎo)論,詳細(xì)介紹了算法設(shè)計問題和技巧。本章將通過運行時間和計算復(fù)雜度比較不同的算法分析,告訴我們哪些算法在給定問題中表現(xiàn)更好。
第3章算法設(shè)計技術(shù)和策略,涵蓋了分治法、動態(tài)規(guī)劃、貪婪算法等各種重要的數(shù)據(jù)結(jié)構(gòu)設(shè)計范式。我們將學(xué)習(xí)通過一些主要原則(例如健壯性、適應(yīng)性和可重用性)創(chuàng)建數(shù)據(jù)結(jié)構(gòu),并學(xué)習(xí)將結(jié)構(gòu)與功能分離。
第4章鏈表,鏈表是最常見的數(shù)據(jù)結(jié)構(gòu)之一,通常用于實現(xiàn)其他結(jié)構(gòu),例如棧和隊列。本章描述了鏈表及其操作和實現(xiàn),并且比較了它們與數(shù)組的行為,討論了每種結(jié)構(gòu)的相對優(yōu)勢和劣勢。
第5章棧和隊列,詳細(xì)介紹了棧和隊列數(shù)據(jù)結(jié)構(gòu)。本章還討論了這些線性數(shù)據(jù)結(jié)構(gòu)的行為,并演示了一些實現(xiàn),給出了典型的現(xiàn)實生活應(yīng)用示例。
第6章樹,考慮了樹如何構(gòu)成許多重要的高級數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。本章將介紹如何實現(xiàn)二叉樹,并研究如何遍歷樹、檢索和插入值。
第7章堆和優(yōu)先隊列,將優(yōu)先隊列作為重要的數(shù)據(jù)結(jié)構(gòu),并展示如何使用堆來實現(xiàn)它們。
第8章哈希表,介紹了符號表,并給出了一些典型的實現(xiàn)方法,討論了各種應(yīng)用程序。我們將了解哈希的過程,給出哈希表的實現(xiàn),并討論各種設(shè)計注意事項。
第9章圖和算法,介紹了一些更專業(yè)的結(jié)構(gòu),包括圖和空間結(jié)構(gòu)。我們將學(xué)習(xí)如何通過節(jié)點和頂點來表示數(shù)據(jù),并創(chuàng)建有向圖和無向圖等結(jié)構(gòu)。我們還將學(xué)習(xí)最小生成樹的不同算法,如Prim算法和Kruskal算法。
第10章搜索,討論了最常見的搜索算法,包括二分搜索和插值搜索算法,還給出了它們在各種數(shù)據(jù)結(jié)構(gòu)中的使用示例。搜索數(shù)據(jù)結(jié)構(gòu)是一項基本任務(wù),有許多方法可以實現(xiàn)。
第11章排序,介紹了最常見的排序方法,包括冒泡排序、插入排序、選擇排序、快速排序和堆排序算法,并詳細(xì)解釋了它們的原理及其Python實現(xiàn)。
第12章選擇算法,討論了如何使用選擇算法來查找列表中的第i個最大的元素。這是與排序算法相關(guān)的重要操作,并且與數(shù)據(jù)結(jié)構(gòu)和算法廣泛相關(guān)。
第13章字符串匹配算法,涵蓋了與字符串相關(guān)的基本概念和定義。本章詳細(xì)討論了各種字符串和模式匹配算法,比如樸素方法,以及KnuthMorrisPratt(KMP)和BoyerMoore模式匹配算法。
附錄練習(xí)答案,提供了第2~13章練習(xí)的答案。
此外,讀者還可以在線獲取與樹算法相關(guān)的額外內(nèi)容,網(wǎng)址為:https://static.packtcdn.com/downloads/9781801073448_Bonus_Content.pdf。
建議
為了充分利用本書,需要在Python 3.10或更高版本上運行本書中的代碼。Python的交互環(huán)境也可以用于運行代碼片段。建議通過執(zhí)行書中提供的代碼來學(xué)習(xí)算法和概念,以更好地理解算法。本書旨在為讀者提供實踐經(jīng)驗,因此建議對所有算法進(jìn)行編程,以充分發(fā)揮本書的價值。
Dr. Basant Agarwal擁有計算機科學(xué)與工程專業(yè)博士和碩士學(xué)位,擁有超過 9 年的科研與教學(xué)經(jīng)驗。2016 年,他憑借歐洲信息與數(shù)學(xué)研究聯(lián)盟(ERCIM)頒發(fā)的 prestigious 獎學(xué)金,在挪威科技大學(xué)(NTNU)擔(dān)任博士后研究員,還曾在新加坡國立大學(xué)(NUS)淡馬錫實驗室擔(dān)任研究科學(xué)家。其研究領(lǐng)域涵蓋人工智能、信息物理系統(tǒng)、文本挖掘、自然語言處理、機器學(xué)習(xí)、深度學(xué)習(xí)、智能系統(tǒng)、專家系統(tǒng)及相關(guān)方向。
第1章Python數(shù)據(jù)類型與結(jié)構(gòu)1
1.1Python 3.10簡介2
1.2Python安裝2
1.2.1Windows操作系統(tǒng)2
1.2.2Linux操作系統(tǒng)2
1.2.3Mac操作系統(tǒng)3
1.3設(shè)置Python開發(fā)環(huán)境3
1.3.1通過命令行設(shè)置3
1.3.2通過Jupyter Notebook進(jìn)行設(shè)置3
1.4數(shù)據(jù)類型和對象5
1.5基本數(shù)據(jù)類型6
1.5.1數(shù)值類型6
1.5.2布爾類型7
1.5.3序列類型7
1.5.4成員運算符、身份運算符和邏輯運算符12
1.5.5元組16
1.6復(fù)雜數(shù)據(jù)類型17
1.6.1字典17
1.6.2集合20
1.7Python的集合模塊23
1.7.1命名元組24
1.7.2雙端隊列24
1.7.3有序字典25
1.7.4默認(rèn)字典25
1.7.5ChainMap26
1.7.6計數(shù)器對象27
1.7.7UserDict27
1.7.8UserList28
1.7.9UserString28
1.8總結(jié)29
第2章算法設(shè)計導(dǎo)論30
2.1算法簡介30
2.2算法的性能分析31
2.2.1時間復(fù)雜度32
2.2.2空間復(fù)雜度33
2.3漸進(jìn)符號34
2.3.1符號35
2.3.2O符號36
2.3.3符號38
2.4平攤分析40
2.5組合復(fù)雜度類別40
2.6計算算法的運行時間復(fù)雜度42
2.7總結(jié)44
練習(xí)44
第3章算法設(shè)計技術(shù)和策略46
3.1算法設(shè)計技術(shù)46
3.2遞歸47
3.3分治法48
3.3.1二分查找48
3.3.2歸并排序50
3.4動態(tài)規(guī)劃54
3.5貪婪算法58
3.6總結(jié)71
練習(xí)71
第4章鏈表73
4.1數(shù)組73
4.2鏈表簡介74
4.3單鏈表76
4.3.1創(chuàng)建和遍歷77
4.3.2追加元素78
4.3.3查詢列表84
4.3.4刪除元素85
4.4雙鏈表89
4.4.1創(chuàng)建和遍歷90
4.4.2追加項91
4.4.3查詢列表97
4.4.4刪除元素98
4.5循環(huán)鏈表102
4.5.1創(chuàng)建和遍歷103
4.5.2添加元素104
4.5.3查詢列表106
4.5.4刪除循環(huán)鏈表中的元素106
4.6鏈表的實際應(yīng)用110
4.7總結(jié)110
練習(xí)110
第5章棧和隊列112
5.1棧112
5.1.1通過數(shù)組實現(xiàn)棧114
5.1.2使用鏈表實現(xiàn)棧117
5.1.3推入操作118
5.1.4彈出操作120
5.1.5查看操作121
5.1.6棧的應(yīng)用122
5.2隊列124
5.2.1Python的基于列表的隊列125
5.2.2基于鏈表的隊列128
5.2.3基于棧的隊列131
5.2.4隊列的應(yīng)用136
5.3總結(jié)139
練習(xí)139
第6章樹140
6.1術(shù)語140
6.2二叉樹142
6.2.1節(jié)點的實現(xiàn)143
6.2.2樹的遍歷144
6.2.3表達(dá)式樹150
6.3二叉搜索樹154
6.3.1二叉搜索樹的操作155
6.3.2二叉搜索樹的優(yōu)點166
6.4總結(jié)168
練習(xí)168
第7章堆和優(yōu)先隊列169
7.1堆169
7.1.1插入操作171
7.1.2刪除操作174
7.1.3刪除堆中特定位置的元素178
7.1.4堆排序180
7.2優(yōu)先隊列181
7.3總結(jié)186
練習(xí)186
第8章哈希表188
8.1簡介188
8.1.1哈希函數(shù)189
8.1.2完美哈希函數(shù)191
8.2解決沖突192
8.3實現(xiàn)哈希表195
8.3.1在哈希表中存儲元素196
8.3.2擴展哈希表197
8.3.3從哈希表中檢索元素199
8.3.4測試哈希表200
8.3.5將哈希表實現(xiàn)為字典200
8.3.6分離鏈接法207
8.4符號表212
8.5總結(jié)213
練習(xí)213
第9章圖和算法214
9.1圖214
9.1.1有向圖和無向圖215
9.1.2有向無環(huán)圖216
9.1.3加權(quán)圖216
9.1.4二分圖217
9.2圖的表示217
9.2.1鄰接表218
9.2.2鄰接矩陣219
9.3圖遍歷220
9.3.1廣度優(yōu)先搜索221
9.3.2深度優(yōu)先搜索226
9.4其他有用的與圖相關(guān)的方法231
9.4.1最小生成樹231
9.4.2Kruskal的最小生成樹算法232
9.4.3Prim的最小生成樹算法234
9.5總結(jié)236
練習(xí)236
第10章搜索237
10.1簡介237
10.2線性搜索238
10.2.1無序線性搜索238
10.2.2有序線性搜索240
10.3跳躍搜索242
10.4二分搜索246
10.5插值搜索251
10.6指數(shù)搜索255
10.7選擇搜索算法259
10.8總結(jié)259
練習(xí)260
第11章排序261
11.1技術(shù)要求261
11.2排序算法261
11.3冒泡排序算法262
11.4插入排序算法266
11.5選擇排序算法269
11.6快速排序算法272
11.7快速排序算法的實現(xiàn)275
11.8Timsort算法278
11.9總結(jié)282
練習(xí)282
第12章選擇算法284
12.1技術(shù)要求284
12.2按排序選擇284
12.3隨機選擇285
12.4確定性選擇288
12.5總結(jié)296
練習(xí)297
第13章字符串匹配算法298
13.1技術(shù)要求298
13.2字符串符號和概念298
13.3模式匹配算法299
13.4暴力算法300
13.5RabinKarp算法302
13.6KnuthMorrisPratt算法307
13.6.1prefix函數(shù)308
13.6.2理解KnuthMorrisPratt算法310
13.6.3實現(xiàn)KnuthMorrisPratt算法313
13.7BoyerMoore算法314
13.8總結(jié)323
練習(xí)323
附錄練習(xí)答案324
第2章算法設(shè)計導(dǎo)論324
第3章算法設(shè)計技術(shù)和策略325
第4章鏈表326
第5章棧和隊列328
第6章樹329
第7章堆和優(yōu)先隊列331
第8章哈希表334
第9章圖和算法334
第10章搜索336
第11章排序337
第12章選擇算法341
第13章字符串匹配算法342