數據結構與算法分析:C++語言描述英文版第4版

數據結構與算法分析:C++語言描述英文版第4版

《數據結構與算法分析:C++語言描述英文版第4版》是2022年人民郵電出版社出版的圖書。

基本介紹

  • 中文名:數據結構與算法分析:C++語言描述英文版第4版
  • 作者:[美]馬克·艾倫·維斯
  • 出版時間:2022年
  • 出版社人民郵電出版社
  • ISBN:9787115580924
內容簡介,圖書目錄,作者簡介,

內容簡介

本書是數據結構和算法分析領域的教材。全書以 C 作為具體的實現語言,介紹了表、棧、佇列、樹、哈希表、優先佇列、排序、不相交集算法、圖論算法、算法分析、算法設計、攤還分析、查找樹算法、後綴數組、後綴樹、k-d 樹、配對堆等內容。本書把算法分析和 C 程式的開發有機結合起來,深入剖析每種算法,內容縝密嚴謹,還詳細講解了精心構建程式的方法。
本書可作為高等院校計算機相關專業的教學用書或參考用書,也可供計算機領域的工程技術人員參考

圖書目錄

Chapter 1 Programming: A General Overview / 第 1章 程式設計:概述 1
1.1 What’s This Book About / 本書討論的內容 1
1.2 Mathematics Review / 數學知識複習 2
1.2.1 Exponents / 指數 3
1.2.2 Logarithms / 對數 3
1.2.3 Series / 級數 4
1.2.4 Modular Arithmetic / 模運算 5
1.2.5 The P Word / 證明方法 6
1.3 A Brief Introduction to Recursion / 遞歸簡論 8
1.4 C Classes / C類 12
1.4.1 Basic class Syntax / 基本的class語法 12
1.4.2 Extra Constructor Syntax and Accessors / 構造函式的附加語法和訪問函式 13
1.4.3 Separation of Interface and Implementation / 接口與實現的分離 16
1.4.4 vector and string / vector類和string類 19
1.5 C Details / C細節 21
1.5.1 Pointers / 指針 21
1.5.2 Lvalues, Rvalues, and References / 左值、右值和引用 23
1.5.3 Parameter Passing / 參數傳遞 25
1.5.4 Return Passing / 返回值傳遞 27
1.5.5 std::swap and std::move / std::swap和std::move 29
1.5.6 The Big-Five: Destructor, Copy Constructor, Move Constructor, Copy Assignment operator=, Move Assignment operator= / 五大函式:析構函式、拷貝構造函式、移動構造函式、拷貝賦值operator=和移動賦值operator= 30
1.5.7 C-style Arrays and Strings / C風格數組和字元串 35
1.6 Templates / 模板 36
1.6.1 Function Templates / 函式模板 37
1.6.2 Class Templates / 類模板 38
1.6.3 Object, Comparable, and an Example / Object、Comparable和一個例子 39
1.6.4 Function Objects / 函式對象 41
1.6.5 Separate Compilation of Class Templates / 類模板的分離式編譯   44
1.7 Using Matrices / 使用矩陣 44
1.7.1 The Data Members, Constructor, and Basic Accessors / 數據成員、構造函式和基本訪問函式 44
1.7.2 operator[] / operator[] 45
1.7.3 Big-Five / 五大函式 46
Summary / 小結 46
Exercises / 練習 46
References / 參考文獻 48
Chapter 2 Algorithm Analysis / 第 2章 算法分析 51
2.1 Mathematical Background / 數學基礎 51
2.2 Model / 模型 54
2.3 What to Analyze / 要分析的問題 54
2.4 Running-Time Calculations / 運行時間計算 57
2.4.1 A Simple Example / 一個簡單的例子 58
2.4.2 General Rules / 一般法則 58
2.4.3 Solutions for the Maximum Subsequence Sum Problem / 子序列和問題的求解 60
2.4.4 Logarithms in the Running Time / 運行時間中的對數 66
2.4.5 Limitations of Worst-Case Analysis / 壞情形分析的局限性 70
Summary / 小結 70
Exercises / 練習 71
References / 參考文獻  
  76
Chapter 3 Lists, Stacks, and Queues / 第3章 表、棧和佇列 77
3.1 Abstract Data Types (ADTs) / 抽象數據類型 77
3.2 The List ADT / 表的抽象數據類型 78
3.2.1 Simple Array Implementation of Lists / 表的簡單數組實現 78
3.2.2 Simple Linked Lists / 簡單鍊表 79
3.3 vector and list in the STL / STL中的vector和list 80
3.3.1 Iterators / 疊代器 82
3.3.2 Example: Using erase on a List / 例子:對表使用erase 83
3.3.3 const_iterators / const_iterators 84
3.4 Implementation of vector / vector的實現 86
3.5 Implementation of list / list的實現 91
3.6 The Stack ADT / 棧的抽象數據類型 103
3.6.1 Stack Model / 棧模型 103
3.6.2 Implementation of Stacks / 棧的實現 104
3.6.3 Applications / 套用 104
3.7 The Queue ADT / 佇列的抽象數據類型 112
3.7.1 Queue Model / 佇列模型 113
3.7.2 Array Implementation of Queues / 佇列的數組實現 113
3.7.3 Applications of Queues / 佇列的套用 115
Summary / 小結 116
Exercises / 練習 116
Chapter 4 Trees / 第4章 樹 121
4.1 Preliminaries / 預備知識 121
4.1.1 Implementation of Trees / 樹的實現 122
4.1.2 Tree Traversals with an Application / 樹的遍歷及套用 123
4.2 Binary Trees / 二叉樹 126
4.2.1 Implementation / 實現 128
4.2.2 An Example: Expression Trees / 一個例子——表達式樹 128
4.3 The Search Tree ADT—Binary Search Trees / 查找樹的抽象數據類型——二叉查找樹 132
4.3.1 contains / contains 134
4.3.2 findMin and findMax / findMin和findMax 135
4.3.3 insert / insert 136
4.3.4 remove / remove 139
4.3.5 Destructor and Copy Constructor / 析構函式和拷貝構造函式 141
4.3.6 Average-Case Analysis / 平均情況分析 141
4.4 AVL Trees / AVL樹 144
4.4.1 Single Rotation / 單旋轉 147
4.4.2 Double Rotation / 雙旋轉 149
4.5 Splay Trees / 伸展樹 158
4.5.1 A Simple Idea (That Does Not Work) / 一個簡單的想法(不能直接使用) 158
4.5.2 Splaying / 展開 160
4.6 Tree Traversals (Revisited) / 樹的遍歷(再次討論) 166
4.7 B-Trees / B樹 168
4.8 Sets and Maps in the Standard Library / 標準庫中的集合與映射 173
4.8.1 Sets / 集合 173
4.8.2 Maps / 映射 174
4.8.3 Implementation of set and map / set和map的實現 175
4.8.4 An Example That Uses Several Maps / 使用多個映射的示例 176
Summary / 小結 181
Exercises / 練習 182
References / 參考文獻 189
Chapter 5 Hashing / 第5章 哈希 193
5.1 General Idea / 一般想法 193
5.2 Hash Function / 哈希函式 194
5.3 Separate Chaining / 分離連結法 196
5.4 Hash Tables without Linked Lists / 不用鍊表的哈希表 201
5.4.1 Linear Probing / 線性探測法 201
5.4.2 Quadratic Probing / 平方探測法 202
5.4.3 Double Hashing / 雙哈希 207
5.5 Rehashing / 再哈希 208
5.6 Hash Tables in the Standard Library / 標準庫中的哈希表 210
5.7 Hash Tables with Worst-Case O(1) Access / 以壞情形O(1)訪問的哈希表 212
5.7.1 Perfect Hashing / 完美哈希 213
5.7.2 Cuckoo Hashing / 杜鵑哈希 215
5.7.3 Hopscotch Hashing / 跳房子哈希 227
5.8 Universal Hashing / 通用哈希 230
5.9 Extendible Hashing / 可擴哈希 233
Summary / 小結 236
Exercises / 練習 237
References / 參考文獻 241
Chapter 6 Priority Queues (Heaps) / 第6章 優先佇列(堆) 245
6.1 Model / 模型 245
6.2 Simple Implementations / 一些簡單的實現 246
6.3 Binary Heap / 二叉堆 247
6.3.1 Structure Property / 結構性質 247
6.3.2 Heap-Order Property / 堆序性質 248
6.3.3 Basic Heap Operations / 基本的堆操作 249
6.3.4 Other Heap Operations / 其他的堆操作 252
6.4 Applications of Priority Queues / 優先佇列的套用 257
6.4.1 The Selection Problem / 選擇問題 258
6.4.2 Event Simulation / 事件模擬 259
6.5 d-Heaps / d堆 260
6.6 Leftist Heaps / 左式堆 261
6.6.1 Leftist Heap Property / 左式堆的性質 261
6.6.2 Leftist Heap Operations / 左式堆操作 262
6.7 Skew Heaps / 斜堆 269
6.8 Binomial Queues / 二項佇列 271
6.8.1 Binomial Queue Structure / 二項佇列構建 271
6.8.2 Binomial Queue Operations / 二項佇列操作 271
6.8.3 Implementation of Binomial Queues / 二項佇列的實現 276
6.9 Priority Queues in the Standard Library / 標準庫中的優先佇列 282
Summary / 小結 283
Exercises / 練習 283
References / 參考文獻 288
Chapter 7 Sorting / 第7章 排序 291
7.1 Preliminaries / 預備知識 291
7.2 Insertion Sort / 插入排序 292
7.2.1 The Algorithm / 算法 292
7.2.2 STL Implementation of Insertion Sort / 插入排序的STL實現 293
7.2.3 Analysis of Insertion Sort / 插入排序的分析 294
7.3 A Lower Bound for Simple Sorting Algorithms / 一些簡單排序算法的下界 295
7.4 Shellsort / 希爾排序 296
7.4.1 Worst-Case Analysis of Shellsort / 希爾排序的壞情形分析 297
7.5 Heapsort / 堆排序 300
7.5.1 Analysis of Heapsort / 堆排序的分析 301
7.6 Mergesort / 歸併排序 304
7.6.1 Analysis of Mergesort / 歸併排序的分析 306
7.7 Quicksort / 快速排序 309
7.7.1 Picking the Pivot / 選取樞紐元 311
7.7.2 Partitioning Strategy / 分割策略 313
7.7.3 Small Arrays / 小數組 315
7.7.4 Actual Quicksort Routines / 實際的快速排序例程 315
7.7.5 Analysis of Quicksort / 快速排序的分析 318
7.7.6 A Linear-Expected-Time Algorithm for Selection / 選擇問題的線性期望時間算法 321
7.8 A General Lower Bound for Sorting / 排序算法的一般下界 323
7.8.1 Decision Trees / 決策樹 323
7.9 Decision-Tree Lower Bounds for Selection Problems / 選擇問題的決策樹下界 325
7.10 Adversary Lower Bounds / 對手下界 328
7.11 Linear-Time Sorts: Bucket Sort and Radix Sort / 線性時間排序:桶式排序和基數排序 331
7.12 External Sorting / 外部排序 336
7.12.1 Why We Need New Algorithms / 為什麼需要一些新的算法 336
7.12.2 Model for External Sorting / 外部排序模型 336
7.12.3 The Simple Algorithm / 簡單算法 337
7.12.4 Multiway Merge / 多路合併 338
7.12.5 Polyphase Merge / 多相合併 339
7.12.6 Replacement Selection / 替換選擇 340
Summary / 小結 341
Exercises / 練習 341
References / 參考文獻 347
Chapter 8 The Disjoint Sets Class / 第8章 不相交集算法 351
8.1 Equivalence Relations / 等價關係 351
8.2 The Dynamic Equivalence Problem / 動態等價性問題 352
8.3 Basic Data Structure / 基本數據結構 353
8.4 Smart Union Algorithms / 靈巧求並算法 357
8.5 Path Compression / 路徑壓縮 360
8.6 Worst Case for Union-by-Rank and Path Compression / 按秩求並和路徑壓縮的壞情形 361
8.6.1 Slowly Growing Functions / 緩慢增長的函式 362
8.6.2 An Analysis by Recursive Decomposition / 通過遞歸分解進行的分析 362
8.6.3 An O (M log*N) Bound / 一個O (M log*N)界 369
8.6.4 An O (Mα(M, N)) Bound / 一個O (Mα(M, N))界 370
8.7 An Application / 一個套用 372
Summary / 小結 374
Exercises / 練習 375
References / 參考文獻 376
Chapter 9 Graph Algorithms / 第9章 圖論算法 379
9.1 Definitions / 若干定義 379
9.1.1 Representation of Graphs / 圖的表示 380
9.2 Topological Sort / 拓撲排序 382
9.3 Shortest-Path Algorithms / 短路徑算法 386
9.3.1 Unweighted Shortest Paths / 無權短路徑 387
9.3.2 Dijkstra’s Algorithm / Dijkstra算法 391
9.3.3 Graphs with Negative Edge Costs / 具有負邊值的圖 400
9.3.4 Acyclic Graphs / 無圈圖 400
9.3.5 All-Pairs Shortest Path / 所有頂點對間的短路徑 404
9.3.6 Shortest Path Example / 短路徑的例 404
9.4 Network Flow Problems / 網路流問題 406
9.4.1 A Simple Maximum-Flow Algorithm / 一個簡單的流算法 408
9.5 Minimum Spanning Tree / 小生成樹 413
9.5.1 Prim’s Algorithm / Prim算法 414
9.5.2 Kruskal’s Algorithm / Kruskal算法 417
9.6 Applications of Depth-First Search / 深度優先搜尋的套用 419
9.6.1 Undirected Graphs / 無向圖 420
9.6.2 Biconnectivity / 雙連通性 421
9.6.3 Euler Circuits / 歐拉迴路 425
9.6.4 Directed Graphs / 有向圖 429
9.6.5 Finding Strong Components / 查找強分支 431
9.7 Introduction to NP-Completeness / NP完全性介紹 432
9.7.1 Easy vs. Hard / 難與易 433
9.7.2 The Class NP / NP類 434
9.7.3 NP-Complete Problems / NP完全問題 434
Summary / 小結 437
Exercises / 練習 437
References / 參考文獻 445
Chapter 10 Algorithm Design Techniques / 第 10章 算法設計技巧  449
10.1 Greedy Algorithms / 貪婪算法 449
10.1.1 A Simple Scheduling Problem / 一個簡單的調度問題 450
10.1.2 Huffman Codes / 哈夫曼編碼 453
10.1.3 Approximate Bin Packing / 近似裝箱問題 459
10.2 Divide and Conquer / 分治算法 467
10.2.1 Running Time of Divide-and-Conquer Algorithms / 分治算法的運行時間 468
10.2.2 Closest-Points Problem / 近點問題 470
10.2.3 The Selection Problem / 選擇問題 475
10.2.4 Theoretical Improvements for Arithmetic Problems / 一些算術問題的理論改進 478
10.3 Dynamic Programming / 動態規劃 482
10.3.1 Using a Table Instead of Recursion / 用表代替遞歸 483
10.3.2 Ordering Matrix Multiplications / 矩陣乘法的順序安排 485
10.3.3 Optimal Binary Search Tree / 二叉查找樹 487
10.3.4 All-Pairs Shortest Path / 所有點對短路徑 491
10.4 Randomized Algorithms / 隨機化算法 494
10.4.1 Random-Number Generators / 隨機數發生器 495
10.4.2 Skip Lists / 跳躍表 500
10.4.3 Primality Testing / 素性測試 503
10.5 Backtracking Algorithms / 回溯算法 506
10.5.1 The Turnpike Reconstruction Problem / 收費公路重建問題 506
10.5.2 Games / 遊戲 511
Summary / 小結 518
Exercises / 練習 518
References / 參考文獻 527
Chapter 11 Amortized Analysis / 第 11章 攤還分析 533
11.1 An Unrelated Puzzle / 一個無關的智力問題 534
11.2 Binomial Queues / 二項佇列 534
11.3 Skew Heaps / 斜堆 539
11.4 Fibonacci Heaps / 斐波那契堆 541
11.4.1 Cutting Nodes in Leftist Heaps / 切除左式堆中的節點 542
11.4.2 Lazy Merging for Binomial Queues / 二項佇列的懶惰合併 544
11.4.3 The Fibonacci Heap Operations / 斐波那契堆操作 548
11.4.4 Proof of the Time Bound / 時間界的證明 549
11.5 Splay Trees / 伸展樹 551
Summary / 小結 555
Exercises / 練習 556
References / 參考文獻 557
Chapter 12 Advanced Data Structures and Implementation / 第 12章 高級數據結構及其實現 559
12.1 Top-Down Splay Trees / 自頂向下伸展樹 559
12.2 Red-Black Trees / 紅黑樹 566
12.2.1 Bottom-Up Insertion / 自底向上的插入 567
12.2.2 Top-Down Red-Black Trees / 自頂向下紅黑樹 568
12.2.3 Top-Down Deletion / 自頂向下刪除 570
12.3 Treaps / treap 樹 576
12.4 Suffix Arrays and Suffix Trees / 後綴數組和後綴樹 579
12.4.1 Suffix Arrays / 後綴數組 580
12.4.2 Suffix Trees / 後綴樹 583
12.4.3 Linear-Time Construction of Suffix Arrays and Suffix Trees / 後綴數組和後綴樹的線性 586
12.5 k -d Trees / k-d 樹 596
12.6 Pairing Heaps / 配對堆 602
Summary / 小結 606
Exercises / 練習 608
References / 參考文獻 612
Appendix A Separate Compilation of Class Templates / 附錄A 類模板的分離式編譯 615
A.1 Everything in the Header / 頭檔案中的內容 616
A.2 Explicit Instantiation / 顯示實例化 616

作者簡介

Mark Allen Weiss,佛羅里達國際大學計算與信息科學學院教授、副院長,本科教育主任和研究生教育主任。他於1987年獲得普林斯頓大學計算機科學博士學位,師從Bob Sedgewick。他曾經擔任全美AP(Advanced Placement)考試計算機學科委員會的主席(2000-2004)。Weiss教授在數據結構和算法分析方面卓有建樹,他的數據結構和算法分析的書籍,受到廣泛好評.已被世界500餘所大學用作教材。

相關詞條

熱門詞條

聯絡我們