關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
數(shù)據(jù)結(jié)構(gòu)與算法分析(C++版)(第三版)(英文版) 本書(shū)采用程序員偏愛(ài)的面向?qū)ο驝++語(yǔ)言來(lái)描述數(shù)據(jù)結(jié)構(gòu)和算法,并把數(shù)據(jù)結(jié)構(gòu)原理和算法分析技術(shù)有機(jī)地結(jié)合在一起,系統(tǒng)介紹了各種類型的數(shù)據(jù)結(jié)構(gòu)和排序、檢索的各種方法。作者非常注意對(duì)每一種數(shù)據(jù)結(jié)構(gòu)的不同存儲(chǔ)方法及有關(guān)算法進(jìn)行分析比較。書(shū)中還引入了一些比較高級(jí)的數(shù)據(jù)結(jié)構(gòu)與先進(jìn)的算法分析技術(shù),并介紹了可計(jì)算性理論的一般知識(shí)。書(shū)中分別給出了C++實(shí)現(xiàn)方法和偽碼實(shí)現(xiàn)方法,便于讀者根據(jù)情況選擇。在作者維護(hù)的網(wǎng)站可下載相關(guān)代碼、編程項(xiàng)目和輔助練習(xí)資料。本書(shū)已根據(jù)作者在網(wǎng)站提供的勘誤表進(jìn)行過(guò)內(nèi)容更正。 適讀人群 :本書(shū)適合作為大專院校計(jì)算機(jī)軟件專業(yè)與計(jì)算機(jī)應(yīng)用專業(yè)學(xué)生的教材和參考書(shū),也適合計(jì)算機(jī)工程技術(shù)人員參考。 本書(shū)采用程序員偏愛(ài)的面向?qū)ο驝++語(yǔ)言來(lái)描述數(shù)據(jù)結(jié)構(gòu)和算法,并把數(shù)據(jù)結(jié)構(gòu)原理和算法分析技術(shù)有機(jī)地結(jié)合在一起,系統(tǒng)介紹了各種類型的數(shù)據(jù)結(jié)構(gòu)和排序、檢索的各種方法。作者非常注意對(duì)每一種數(shù)據(jù)結(jié)構(gòu)的不同存儲(chǔ)方法及有關(guān)算法進(jìn)行分析比較。書(shū)中還引入了一些比較高級(jí)的數(shù)據(jù)結(jié)構(gòu)與先進(jìn)的算法分析技術(shù),并介紹了可計(jì)算性理論的一般知識(shí)。 導(dǎo)讀 本書(shū)是關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法的經(jīng)典教材,主要論述了數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、算法設(shè)計(jì)以及算法評(píng)價(jià),使讀者能夠深入了解線性表、棧、隊(duì)列、樹(shù)、圖等數(shù)據(jù)結(jié)構(gòu)以及排序和檢索等基礎(chǔ)算法,并掌握在不同的數(shù)據(jù)結(jié)構(gòu)上進(jìn)行有關(guān)算法設(shè)計(jì)的思想和技巧。書(shū)中包含大量代碼實(shí)例和詳盡的解釋,非常適合作為計(jì)算機(jī)專業(yè)本科生的低年級(jí)入門教材。 全書(shū)由淺入深,分成了五部分。針對(duì)計(jì)算機(jī)專業(yè)的低年級(jí)本科生而言,可重點(diǎn)學(xué)習(xí)前面三部分的內(nèi)容,學(xué)有余力的讀者可以在此基礎(chǔ)上繼續(xù)研讀后面的內(nèi)容。下面為讀者介紹本書(shū)的重點(diǎn)內(nèi)容。 基礎(chǔ)知識(shí) 本書(shū)第1章介紹數(shù)據(jù)結(jié)構(gòu)的入門基礎(chǔ)知識(shí)。其中1.1節(jié)主要介紹數(shù)據(jù)結(jié)構(gòu)的定義、基本術(shù)語(yǔ)以及數(shù)據(jù)結(jié)構(gòu)的基本類型。讀者可通過(guò)該節(jié)的學(xué)習(xí),重點(diǎn)理解數(shù)據(jù)結(jié)構(gòu)對(duì)抽象表達(dá)、程序建模的重要作用,了解在實(shí)際應(yīng)用過(guò)程中數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點(diǎn)分析方法。1.2節(jié)重點(diǎn)介紹基于抽象數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)描述方法,這是整本書(shū)中各個(gè)數(shù)據(jù)結(jié)構(gòu)的基本描述方法。讀者可穿插翻閱后面第4章至第6章中各種數(shù)據(jù)結(jié)構(gòu)的抽象數(shù)據(jù)類型,加深對(duì)此概念的理解。此外,通過(guò)學(xué)習(xí)1.4節(jié),讀者可進(jìn)一步理解數(shù)據(jù)結(jié)構(gòu)、問(wèn)題與算法的關(guān)系。 第2章介紹本課程涉及的一些基礎(chǔ)數(shù)學(xué)知識(shí)。這里介紹的絕大部分?jǐn)?shù)學(xué)知識(shí),讀者都在中學(xué)階段學(xué)過(guò)。讀者可簡(jiǎn)單快速地瀏覽一下,用時(shí)再來(lái)回顧翻查。 第3章主要介紹算法復(fù)雜度的定義以及分析方法。通過(guò)學(xué)習(xí)這一章,讀者就能了解漸近算法復(fù)雜度分析方法,理解上界分析、下界分析以及確切界的具體定義和快速分析方法,并掌握針對(duì)任意給定程序片段的基本分析方法。 數(shù)據(jù)結(jié)構(gòu) 本書(shū)第II部分是整本教材的重點(diǎn),主要討論了線性表(List)、二叉樹(shù)(Binary Tree)、普通樹(shù)(General Tree)和圖(Graph)的定義與實(shí)現(xiàn)方法。為了能對(duì)各類數(shù)據(jù)結(jié)構(gòu)融會(huì)貫通,建議讀者將第4章至第6章以及第11章放在一起來(lái)進(jìn)行對(duì)比學(xué)習(xí)。 第4章主要介紹線性表的定義、存儲(chǔ)實(shí)現(xiàn)方法,以及插入、刪除和定位等基本運(yùn)算;介紹了棧和隊(duì)列的基本定義、基本操作,以及靈活運(yùn)用線性表解決現(xiàn)實(shí)工程問(wèn)題的方法。本章的重點(diǎn)是分析線性表的數(shù)組和鏈表這兩種實(shí)現(xiàn)方法的優(yōu)缺點(diǎn),實(shí)現(xiàn)線性表的插入、刪除和定位等基本運(yùn)算的算法,掌握棧的入棧和出棧的操作以及隊(duì)列的入隊(duì)和出隊(duì)的操作。本章的難點(diǎn)是掌握單鏈表及循環(huán)鏈表的算法設(shè)計(jì)綜合應(yīng)用,掌握在循環(huán)隊(duì)列上進(jìn)行入隊(duì)、出隊(duì)以及求隊(duì)列長(zhǎng)度的操作。 第5章主要闡述二叉樹(shù)的基本定義和存儲(chǔ)實(shí)現(xiàn)方式,介紹二叉樹(shù)的遍歷和搜索等基本操作,并討論堆和哈夫曼樹(shù)的基本原理和實(shí)現(xiàn)方法。本章的重點(diǎn)是基于鏈接和數(shù)組兩種存儲(chǔ)結(jié)構(gòu)的二叉樹(shù)實(shí)現(xiàn)方法,基于遞歸的二叉樹(shù)遍歷算法,以及二叉檢索樹(shù)的搜索、刪除結(jié)點(diǎn)和添加結(jié)點(diǎn)等操作的實(shí)現(xiàn)。本章的難點(diǎn)是堆的構(gòu)建,插入刪除結(jié)點(diǎn)的算法實(shí)現(xiàn),以及哈夫曼樹(shù)和哈夫曼編碼的原理。 第6章主要介紹普通樹(shù)的基本定義、遍歷算法,以及樹(shù)的基本存儲(chǔ)結(jié)構(gòu)的原理。本章的重點(diǎn)是左子結(jié)點(diǎn)/右兄弟結(jié)點(diǎn)的實(shí)現(xiàn)方法,以及普通樹(shù)和森林與二叉樹(shù)的相互轉(zhuǎn)換方法。本章的難點(diǎn)是普通樹(shù)的順序存儲(chǔ)方法。 第11章主要介紹圖的定義和實(shí)現(xiàn)方法,圖的遍歷算法、拓?fù)渑判蛩惴、最短路徑算法以及最小生成?shù)算法。本章的重點(diǎn)是圖的鄰接表和鄰接矩陣兩種實(shí)現(xiàn)方法的原理以及優(yōu)缺點(diǎn)對(duì)比,基于遞歸函數(shù)的圖的遍歷算法的實(shí)現(xiàn),拓?fù)渑判蛩惴ǖ膶?shí)現(xiàn)方法以及應(yīng)用。本章的難點(diǎn)是Dijkstra最短路徑算法、Floyd最短路徑算法,以及最小支撐樹(shù)算法。 排序與檢索算法 第III部分主要介紹排序與檢索這兩類比較常見(jiàn)的算法,讀者在掌握了前面所學(xué)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,可以較為容易地掌握這些算法。 第7章和第8章主要介紹排序算法的定義、排序算法的穩(wěn)定性分析方法、排序算法的設(shè)計(jì)與實(shí)現(xiàn)、排序算法的復(fù)雜度對(duì)比分析,以及排序算法的應(yīng)用。這兩章的重點(diǎn)是快速排序算法、歸并排序算法以及堆排序算法的實(shí)現(xiàn)。這兩章的難點(diǎn)是希爾排序算法的原理和實(shí)現(xiàn),以及快速排序算法的改進(jìn)方法。 第9章主要介紹檢索的基本原理和二分法檢索,討論了哈希表的原理、構(gòu)建以及相關(guān)操作。本章的重點(diǎn)是哈希表的原理、哈希函數(shù)的設(shè)計(jì)方法,以及哈希表的插入和刪除算法的實(shí)現(xiàn)。本章的難點(diǎn)是哈希表的沖突解決策略。 第10章主要介紹線性索引、2-3樹(shù)索引、B/B+樹(shù)索引的構(gòu)建方法,以及算法復(fù)雜度分析方法。本章的重點(diǎn)是線性索引和2-3樹(shù)索引的插入、刪除和檢索算法,以及B樹(shù)和B+樹(shù)的定義。本章的難點(diǎn)是B樹(shù)和B+樹(shù)的插入、刪除和檢索算法。 至此,通過(guò)前三部分的學(xué)習(xí),讀者已掌握了數(shù)據(jù)結(jié)構(gòu)的基本知識(shí)、理論和分析方法,為從事相關(guān)計(jì)算機(jī)程序分析和設(shè)計(jì)工作以及相關(guān)專業(yè)的后續(xù)課程學(xué)習(xí)打下了扎實(shí)的基礎(chǔ)。讀者在本書(shū)各章節(jié)的學(xué)習(xí)過(guò)程中,可動(dòng)手實(shí)踐對(duì)應(yīng)的程序代碼,掌握各類數(shù)據(jù)結(jié)構(gòu)與算法的實(shí)現(xiàn)方法。華南理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院的“數(shù)據(jù)結(jié)構(gòu)”課程采用了本書(shū)作為教材。我們授課團(tuán)隊(duì)結(jié)合本書(shū)設(shè)計(jì)了相應(yīng)的在線教學(xué)視頻(https://next.xuetangx.com/course/SCUT08091000960/),感興趣的讀者可參考學(xué)習(xí),定能起到事半功倍的作用。采用本書(shū)作為教材的授課教師,也可登錄華信教育資源網(wǎng)(www.hxedu.com.cn)注冊(cè)后免費(fèi)下載我們的教學(xué)用PPT等相關(guān)資料。 呂建明教授 博導(dǎo) 華南理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 Preface We study data structures so that we can learn to write more efficient programs. But why must programs be efficient when new computers are faster every year? The reason is that our ambitions grow with our capabilities. Instead of rendering efficiency needs obsolete, the modern revolution in computing power and storage capability merely raises the efficiency stakes as we attempt more complex tasks. The quest for program efficiency need not and should not conflict with sound design and clear coding. Creating efficient programs has little to do with “programming tricks” but rather is based on good organization of information and good algorithms. A programmer who has not mastered the basic principles of clear design is not likely to write efficient programs. Conversely, concerns related to development costs and maintainability should not be used as an excuse to justify inefficient performance. Generality in design can and should be achieved without sacrificing performance, but this can only be done if the designer understands how to measure performance and does so as an integral part of the design and implementation process. Most computer science curricula recognize that good programming skills begin with a strong emphasis on fundamental software engineering principles. Then, once a programmer has learned the principles of clear program design and implementation, the next step is to study the effects of data organization and algorithms on program efficiency. Approach: This book describes many techniques for representing data. These techniques are presented within the context of the following principles: 1. Each data structure and each algorithm has costs and benefits. Practitioners need a thorough understanding of how to assess costs and benefits to be able to adapt to new design challenges. This requires an understanding of the principles of algorithm analysis, and also an appreciation f Clifford A. Shaffer教授于美國(guó)馬里蘭大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,在弗吉尼亞理工大學(xué)計(jì)算機(jī)科學(xué)系任教超過(guò)30年,具有豐富的教學(xué)經(jīng)驗(yàn),并參與遺傳學(xué)、生物信息學(xué)和計(jì)算生物學(xué)等交叉項(xiàng)目。著有多本數(shù)據(jù)結(jié)構(gòu)和算法分析的教材。
Contents
Part I Preliminaries 預(yù)備知識(shí) Chapter 1 Data Structures and Algorithms 數(shù)據(jù)結(jié)構(gòu)和算法 3 1.1 A Philosophy of Data Structures 數(shù)據(jù)結(jié)構(gòu)的原則 4 1.1.1 The Need for Data Structures 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的必要性 4 1.1.2 Costs and Benefits 代價(jià)與效益 6 1.2 Abstract Data Types and Data Structures 抽象數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu) 8 1.3 Design Patterns 設(shè)計(jì)模式 12 1.3.1 Flyweight 享元模式 13 1.3.2 Visitor 訪問(wèn)者模式 13 1.3.3 Composite 組合模式 14 1.3.4 Strategy 策略模式 15 1.4 Problems, Algorithms, and Programs 問(wèn)題、算法和程序 16 1.5 Further Reading 深入學(xué)習(xí)導(dǎo)讀 18 1.6 Exercises 習(xí)題 20 Chapter 2 Mathematical Preliminaries 數(shù)學(xué)預(yù)備知識(shí) 25 2.1 Sets and Relations 集合和關(guān)系 25 2.2 Miscellaneous Notation 常用數(shù)學(xué)術(shù)語(yǔ) 29 2.3 Logarithms 對(duì)數(shù) 31 2.4 Summations and Recurrences 級(jí)數(shù)求和與遞歸 32 2.5 Recursion 遞歸 36 2.6 Mathematical Proof Techniques 數(shù)學(xué)證明方法 38 2.6.1 Direct Proof 直接證明法 39 2.6.2 Proof by Contradiction 反證法 39 2.6.3 Proof by Mathematical Induction 數(shù)學(xué)歸納法 40 2.7 Estimation 估計(jì) 46 2.8 Further Reading 深入學(xué)習(xí)導(dǎo)讀 47 2.9 Exercises 習(xí)題 48 Chapter 3 Algorithm Analysis 算法分析 55 3.1 Introduction 概述 55 3.2 Best, Worst, and Average Cases 最佳、最差和平均情況 61 3.3 A Faster Computer, or a Faster Algorithm 換一臺(tái)更快的計(jì)算機(jī),還是換一種更快的算法 62 3.4 Asymptotic Analysis 漸近分析 65 3.4.1 Upper Bounds 上限 65 3.4.2 Lower Bounds 下限 67 3.4.3 Θ Notation Θ表示法 68 3.4.4 Simplifying Rules 化簡(jiǎn)法則 69 3.4.5 Classifying Functions 函數(shù)分類 70 3.5 Calculating the Running Time for a Program 程序運(yùn)行時(shí)間的計(jì)算 71 3.6 Analyzing Problems 問(wèn)題的分析 76 3.7 Common Misunderstandings 容易混淆的概念 77 3.8 Multiple Parameters 多參數(shù)問(wèn)題 79 3.9 Space Bounds 空間代價(jià) 80 3.10 Speeding Up Your Programs 加速你的程序 82 3.11 Empirical Analysis 實(shí)證分析 85 3.12 Further Reading 深入學(xué)習(xí)導(dǎo)讀 86 3.13 Exercises 習(xí)題 86 3.14 Projects 項(xiàng)目設(shè)計(jì) 90 Part II Fundamental Data Structures 基本數(shù)據(jù)結(jié)構(gòu) Chapter 4 Lists, Stacks, and Queues 線性表、棧和隊(duì)列 95 4.1 Lists 線性表 96 4.1.1 Array-Based List Implementation 順序表的實(shí)現(xiàn) 100 4.1.2 Linked Lists 鏈表 103 4.1.3 Comparison of List Implementations 線性表實(shí)現(xiàn)方法的比較 112 4.1.4 Element Implementations 元素的表示 114 4.1.5 Doubly Linked Lists 雙鏈表 115 4.2 Stacks 棧 120 4.2.1 Array-Based Stacks 順序棧 121 4.2.2 Linked Stacks 鏈?zhǔn)綏?123 4.2.3 Comparison of Array-Based and Linked Stacks 順序棧與鏈?zhǔn)綏5谋容^ 123 4.2.4 Implementing Recursion 遞歸的實(shí)現(xiàn) 125 4.3 Queues 隊(duì)列 127 4.3.1 Array-Based Queues 順序隊(duì)列 128 4.3.2 Linked Queues 鏈?zhǔn)疥?duì)列 133 4.3.3 Comparison of Array-Based and Linked Queues 順序隊(duì)列與鏈?zhǔn)疥?duì)列的比較 133 4.4 Dictionaries 字典 133 4.5 Further Reading 深入學(xué)習(xí)導(dǎo)讀 145 4.6 Exercises 習(xí)題 145 4.7 Projects 項(xiàng)目設(shè)計(jì) 148 Chapter 5 Binary Trees 二叉樹(shù) 151 5.1 Definitions and Properties 定義及主要特性 151 5.1.1 The Full Binary Tree Theorem 滿二叉樹(shù)定理 153 5.1.2 A Binary Tree Node ADT 二叉樹(shù)的抽象數(shù)據(jù)類型 155 5.2 Binary Tree Traversals 遍歷二叉樹(shù) 155 5.3 Binary Tree Node Implementations 二叉樹(shù)的實(shí)現(xiàn) 160 5.3.1 Pointer-Based Node Implementations 使用指針實(shí)現(xiàn)二叉樹(shù) 160 5.3.2 Space Requirements 空間代價(jià) 166 5.3.3 Array Implementation for Complete Binary Trees 使用數(shù)組實(shí)現(xiàn)完全二叉樹(shù) 168 5.4 Binary Search Trees 二叉檢索樹(shù) 168 5.5 Heaps and Priority Queues 堆與優(yōu)先隊(duì)列 178 5.6 Huffman Coding Trees Huffman編碼樹(shù) 185 5.6.1 Building Huffman Coding Trees 建立Huffman編碼樹(shù) 186 5.6.2 Assigning and Using Huffman Codes Huffman編碼及其用法 192 5.6.3 Search in Huffman Trees 在Huffman樹(shù)中搜索 195 5.7 Further Reading 深入學(xué)習(xí)導(dǎo)讀 196 5.8 Exercises 習(xí)題 196 5.9 Projects 項(xiàng)目設(shè)計(jì) 200 Chapter 6 Non-Binary Trees 樹(shù) 203 6.1 General Tree Definitions and Terminology 樹(shù)的定義與術(shù)語(yǔ) 203 6.1.1 An ADT for General Tree Nodes 樹(shù)結(jié)點(diǎn)的ADT 204 6.1.2 General Tree Traversals 樹(shù)的遍歷 205 6.2 The Parent Pointer Implementation 父指針表示法 207 6.3 General Tree Implementations 樹(shù)的實(shí)現(xiàn) 213 6.3.1 List of Children 子結(jié)點(diǎn)表表示法 214 6.3.2 The Left-Child/Right-Sibling Implementation 左子結(jié)點(diǎn)/右兄弟結(jié)點(diǎn)表示法 215 6.3.3 Dynamic Node Implementations 動(dòng)態(tài)結(jié)點(diǎn)表示法 215 6.3.4 Dynamic “Left-Child/Right-Sibling” Implementation 動(dòng)態(tài)左子結(jié)點(diǎn)/右兄弟結(jié)點(diǎn)表示法 218 6.4 K-ary Trees K叉樹(shù) 218 6.5 Sequential Tree Implementations 樹(shù)的順序表示法 219 6.6 Further Reading 深入學(xué)習(xí)導(dǎo)讀 223 6.7 Exercises 習(xí)題 223 6.8 Projects 項(xiàng)目設(shè)計(jì) 226 Part III Sorting and Searching 排序與檢索 Chapter 7 Internal Sorting 內(nèi)排序 231 7.1 Sorting Terminology and Notation 排序術(shù)語(yǔ) 232 7.2 Three Θ(n2) Sorting Algorithms 三種代價(jià)為Θ(n2)的排序算法 233 7.2.1 Insertion Sort 插入排序 233 7.2.2 Bubble Sort 冒泡排序 235 7.2.3 Selection Sort 選擇排序 237 7.2.4 The Cost of Exchange Sorting 交換排序算法的時(shí)間代價(jià) 238 7.3 Shellsort Shell排序 239 7.4 Mergesort 歸并排序 241 7.5 Quicksort 快速排序 244 7.6 Heapsort 堆排序 251 7.7 Binsort and Radix Sort 分配排序和基數(shù)排序 252 7.8 An Empirical Comparison of Sorting Algorithms 對(duì)各種排序算法的實(shí)驗(yàn)比較 259 7.9 Lower Bounds for Sorting 排序問(wèn)題的下限 261 7.10 Further Reading 深入學(xué)習(xí)導(dǎo)讀 265 7.11 Exercises 習(xí)題 265 7.12 Projects 項(xiàng)目設(shè)計(jì) 269 Chapter 8 File Processing and External Sorting 文件管理和外排序 273 8.1 Primary versus Secondary Storage 主存儲(chǔ)器和輔助存儲(chǔ)器 273 8.2 Disk Drives 磁盤 276 8.2.1 Disk Drive Architecture 磁盤結(jié)構(gòu) 276 8.2.2 Disk Access Costs 磁盤訪問(wèn)代價(jià) 280 8.3 Buffers and Buffer Pools 緩沖區(qū)和緩沖池 282 8.4 The Programmer’s View of Files 程序員的文件視圖 290 8.5 External Sorting 外排序 291 8.5.1 Simple Approaches to External Sorting 外排序的簡(jiǎn)單方法 294 8.5.2 Replacement Selection 置換選擇排序 296 8.5.3 Multiway Merging 多路歸并 300 8.6 Further Reading 深入學(xué)習(xí)導(dǎo)讀 303 8.7 Exercises 習(xí)題 304 8.8 Projects 項(xiàng)目設(shè)計(jì) 307 Chapter 9 Searching 檢索 311 9.1 Searching Unsorted and Sorted Arrays 檢索未排序和已排序的數(shù)組 312 9.2 Self-Organizing Lists 自組織線性表 317 9.3 Bit Vectors for Representing Sets 集合檢索 323 9.4 Hashing 散列方法 324 9.4.1 Hash Functions 散列函數(shù) 325 9.4.2 Open Hashing 開(kāi)散列方法 330 9.4.3 Closed Hashing 閉散列方法 331 9.4.4 Analysis of Closed Hashing 閉散列方法分析 339 9.4.5 Deletion 刪除 344 9.5 Further Reading 深入學(xué)習(xí)導(dǎo)讀 345 9.6 Exercises 習(xí)題 345 9.7 Projects 項(xiàng)目設(shè)計(jì) 348 Chapter 10 Indexing 索引技術(shù) 351 10.1 Linear Indexing 線性索引 353 10.2 ISAM 索引順序訪問(wèn)方法 356 10.3 Tree-based Indexing 基于樹(shù)的索引 358 10.4 2-3 Trees 2-3樹(shù) 360 10.5 B-Trees B樹(shù) 364 10.5.1 B+-Trees B+樹(shù) 368 10.5.2 B-Tree Analysis B樹(shù)分析 374 10.6 Further Reading 深入學(xué)習(xí)導(dǎo)讀 375 10.7 Exercises 習(xí)題 375 10.8 Projects 項(xiàng)目設(shè)計(jì) 377 Part IV Advanced Data Structures 高級(jí)數(shù)據(jù)結(jié)構(gòu) Chapter 11 Graphs 圖 381 11.1 Terminology and Representations 術(shù)語(yǔ)和表示法 382 11.2 Graph Implementations 圖的實(shí)現(xiàn) 386 11.3 Graph Traversals 圖的遍歷 390 11.3.1 Depth-First Search 深度優(yōu)先搜索 393 11.3.2 Breadth-First Search 廣度優(yōu)先搜索 394 11.3.3 Topological Sort 拓?fù)渑判?394 11.4 Shortest-Paths Problems 最短路徑問(wèn)題 399 11.4.1 Single-Source Shortest Paths 單源最短路徑 400 11.5 Minimum-Cost Spanning Trees 最小支撐樹(shù) 402 11.5.1 Prim’s Algorithm Prim算法 404 11.5.2 Kruskal’s Algorithm Kruskal算法 407 11.6 Further Reading 深入學(xué)習(xí)導(dǎo)讀 408 11.7 Exercises 習(xí)題 408 11.8 Projects 項(xiàng)目設(shè)計(jì) 412 Chapter 12 Lists and Arrays Revisited 線性表和數(shù)組高級(jí)技術(shù) 415 12.1 Multilists 廣義表 415 12.2 Matrix Representations 矩陣的表示方法 418 12.3 Memory Management 存儲(chǔ)管理 422 12.3.1 Dynamic Storage Allocation 動(dòng)態(tài)存儲(chǔ)分配 424 12.3.2 Failure Policies and Garbage Collection 失敗處理策略和無(wú)用單元收集 431 12.4 Further Reading 深入學(xué)習(xí)導(dǎo)讀 435 12.5 Exercises 習(xí)題 436 12.6 Projects 項(xiàng)目設(shè)計(jì) 437 Chapter 13 Advanced Tree Structures 高級(jí)樹(shù)結(jié)構(gòu) 439 13.1 Tries Tries結(jié)構(gòu) 439 13.2 Balanced Trees 平衡樹(shù) 444 13.2.1 The AVL Tree AVL樹(shù) 445 13.2.2 The Splay Tree 伸展樹(shù) 447 13.3 Spatial Data Structures 空間數(shù)據(jù)結(jié)構(gòu) 450 13.3.1 The k-d Tree k-d樹(shù) 452 13.3.2 The PR quadtree PR四分樹(shù) 457 13.3.3 Other Point Data Structures 其他點(diǎn)狀數(shù)據(jù)結(jié)構(gòu) 461 13.3.4 Other Spatial Data Structures 其他空間數(shù)據(jù)結(jié)構(gòu) 463 13.4 Further Reading 深入學(xué)習(xí)導(dǎo)讀 463 13.5 Exercises 習(xí)題 464 13.6 Projects 項(xiàng)目設(shè)計(jì) 465 Part V Theory of Algorithms 算法理論 Chapter 14 Analysis Techniques 分析技術(shù) 471 14.1 Summation Techniques 求和技術(shù) 472 14.2 Recurrence Relations 遞歸關(guān)系 477 14.2.1 Estimating Upper and Lower Bounds 估算上下限 477 14.2.2 Expanding Recurrences 擴(kuò)展遞歸 480 14.2.3 Divide and Conquer Recurrences 分治法遞歸 482 14.2.4 Average-Case Analysis of Quicksort 快速排序平均情況分析 484 14.3 Amortized Analysis 均攤分析 486 14.4 Further Reading 深入學(xué)習(xí)導(dǎo)讀 489 14.5 Exercises 習(xí)題 489 14.6 Projects 項(xiàng)目設(shè)計(jì) 493 Chapter 15 Lower Bounds 下限 495 15.1 Introduction to Lower Bounds Proofs 下限證明簡(jiǎn)介 496 15.2 Lower Bounds on Searching Lists 線性表檢索的下限 498 15.2.1 Searching in Unsorted Lists 無(wú)序線性表檢索 498 15.2.2 Searching in Sorted Lists 有序線性表檢索 500 15.3 Finding the Maximum Value 查找最大值 501 15.4 Adversarial Lower Bounds Proofs 對(duì)抗性下限證明 503 15.5 State Space Lower Bounds Proofs 狀態(tài)空間下限證明 506 15.6 Finding the ith Best Element 查找第i大元素 509 15.7 Optimal Sorting 優(yōu)化排序 511 15.8 Further Reading 深入學(xué)習(xí)導(dǎo)讀 514 15.9 Exercises 習(xí)題 514 15.10 Projects 項(xiàng)目設(shè)計(jì) 517 Chapter 16 Patterns of Algorithms 算法模式 519 16.1 Dynamic Programming 動(dòng)態(tài)規(guī)劃 519 16.1.1 The Knapsack Problem 背包問(wèn)題 521 16.1.2 All-Pairs Shortest Paths 全局最短路徑 523 16.2 Randomized Algorithms 隨機(jī)算法 525 16.2.1 Randomized algorithms for finding large values 查找最大值的隨機(jī)算法 525 16.2.2 Skip Lists 跳躍表 526 16.3 Numerical Algorithms 數(shù)值算法 532 16.3.1 Exponentiation 冪運(yùn)算 533 16.3.2 Largest Common Factor 最大公約數(shù) 533 16.3.3 Matrix Multiplication 矩陣相乘 534 16.3.4 Random Numbers 隨機(jī)數(shù) 536 16.3.5 The Fast Fourier Transform 快速傅里葉變換 537 16.4 Further Reading 深入學(xué)習(xí)導(dǎo)讀 542 16.5 Exercises 習(xí)題 542 16.6 Projects 項(xiàng)目設(shè)計(jì) 543 Chapter 17 Limits to Computation 計(jì)算的限制 545 17.1 Reductions 歸約 546 17.2 Hard Problems 難解問(wèn)題 551 17.2.1 The Theory of NP-Completeness NP完全性理論 553 17.2.2 NP-Completeness Proofs NP完全性證明 557 17.2.3 Coping with NP-Complete Problems 處理NP完全性問(wèn)題 562 17.3 Impossible Problems 不可解問(wèn)題 565 17.3.1 Uncountability 不可數(shù)性 566 17.3.2 The Halting Problem Is Unsolvable 停機(jī)問(wèn)題的不可解性 569 17.4 Further Reading 深入學(xué)習(xí)導(dǎo)讀 571 17.5 Exercises 習(xí)題 572 17.6 Projects 項(xiàng)目設(shè)計(jì) 574 Part VI Appendix 附錄 Appendix A Utility Functions 實(shí)用函數(shù) 579 Bibliography 參考文獻(xiàn) 581
你還可能感興趣
我要評(píng)論
|