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

[美]馬克·艾倫·維斯(Mark Allen Weiss),王紅梅,溫來祥

  • 出版商: 清華大學
  • 出版日期: 2026-03-01
  • 售價: $834
  • 語言: 簡體中文
  • 頁數: 418
  • ISBN: 7302710201
  • ISBN-13: 9787302710202
  • 相關分類: Algorithms-data-structures
  • 下單後立即進貨 (約4週~6週)

  • 數據結構與算法分析:C++語言描述(第4版)-preview-1
  • 數據結構與算法分析:C++語言描述(第4版)-preview-2
  • 數據結構與算法分析:C++語言描述(第4版)-preview-3
數據結構與算法分析:C++語言描述(第4版)-preview-1

相關主題

商品描述

"本書是數據結構和算法分析的經典教材,使用C++作為具體的實現語言。內容包括表、棧、隊列、樹、散列表、優先隊列、排序、不相交集算法、圖論算法、搜索樹算法、後綴數組、後綴樹、kd樹、配對堆,以及算法分析、攤還分析、算法設計技術等。本書把算法分析與數據結構有機結合起來,深入分析每種算法,內容全面、推導縝密,並細致講解精心構造程序的方法。 本書概念清楚,邏輯性強,內容新穎,適合作為高等學校計算機及相關專業的教材或參考書,也適合計算機工程技術人員參考。 "

目錄大綱

目錄

 

第1章程序設計: 綜述1

1.1本書討論的內容1

1.2復習數學知識2

1.2.1指數2

1.2.2對數2

1.2.3級數3

1.2.4模運算4

1.2.5證明方法4

1.3遞歸簡論6

1.4C++類8

1.4.1類的基本語法8

1.4.2構造函數的其他語法和訪問函數9

1.4.3接口與實現分離11

1.4.4vector類和string類13

1.5C++細節15

1.5.1指針15

1.5.2左值、右值和引用16

1.5.3參數傳遞18

1.5.4傳遞返回值20

1.5.5std:swap和std::move21

1.5.6五大函數21

1.5.7C風格的數組和字符串25

1.6模板26

1.6.1函數模板26

1.6.2類模板27

1.6.3Object、Comparable和例子28

1.6.4函數對象29

1.6.5類模板的分離式編譯31

1.7使用矩陣32

1.7.1數據成員、構造函數和基本訪問函數33

1.7.2operator[ ]33

1.7.3五大函數33

小結33

練習34

參考文獻35

第2章算法分析36

2.1數學基礎36

2.2模型38

2.3要分析的問題38

2.4估算運行時間40

2.4.1簡單的例子40

2.4.2一般法則41

2.4.3求解最大子序列和問題42

2.4.4對數運行時間46

2.4.5分析最壞情況的局限性49

小結49

練習49

參考文獻53

第3章表、棧和隊列54

3.1抽象數據類型54

3.2表ADT54

3.2.1表的簡單數組實現55

3.2.2簡單鏈表55

3.3STL中的容器vector和list56

3.3.1疊代器57

3.3.2例子: 對表使用erase函數58

3.3.3const_iterators59

3.4vector的實現61

3.5list的實現64

3.6棧ADT72

3.6.1棧模型72

3.6.2棧的實現73

3.6.3棧的應用73

3.7隊列ADT79

3.7.1隊列模型79

3.7.2隊列的數組實現79

3.7.3隊列的應用80

小結81

練習81

第4章樹85

4.1預備知識85

4.1.1樹的實現86

4.1.2樹的遍歷與應用86

4.2二叉樹89

4.2.1實現89

4.2.2例子: 表達式樹89

4.3查找樹ADT——二叉查找樹91

4.3.1contains函數93

4.3.2findMin函數和findMax函數94

4.3.3insert函數95

4.3.4remove函數96

4.3.5析構函數和拷貝構造函數98

4.3.6平均情況分析98

4.4AVL樹100

4.4.1單旋轉102

4.4.2雙旋轉104

4.5伸展樹109

4.5.1一種簡單的想法(不可行)110

4.5.2伸展111

4.6樹的遍歷(回顧)116

4.7B樹117

4.8STL中的容器set和map121

4.8.1集合容器set121

4.8.2映射容器map122

4.8.3set和map的實現123

4.8.4例子: 使用多個map123

小結127

練習127

參考文獻132

第5章散列表133

5.1基本思想133

5.2散列函數134

5.3分離鏈接法135

5.4不用鏈表的散列表138

5.4.1線性探測法139

5.4.2平方探測法140

5.4.3雙散列143

5.5再散列144

5.6標準庫中的散列表146

5.7最壞情況下O(1)訪問時間的散列表146

5.7.1完美散列147

5.7.2杜鵑散列148

5.7.3跳房子散列155

5.8通用散列158

5.9可擴散列160

小結162

練習163

參考文獻166

第6章優先隊列(堆)168

6.1模型168

6.2幾種簡單的實現169

6.3二叉堆169

6.3.1結構性質169

6.3.2堆序性質170

6.3.3堆的基本操作171

6.3.4堆的其他操作174

6.4優先隊列的應用176

6.4.1選擇問題177

6.4.2事件模擬178

6.5d堆179

6.6左式堆179

6.6.1左式堆的性質179

6.6.2左式堆的操作180

6.7斜堆185

6.8二項隊列186

6.8.1二項隊列的結構186

6.8.2二項隊列的操作187

6.8.3二項隊列的實現189

6.9標準庫的優先隊列193

小結194

練習194

參考文獻198

第7章排序200

7.1預備知識200

7.2插入排序201

7.2.1算法201

7.2.2插入排序的STL實現201

7.2.3插入排序的分析202

7.3一些簡單排序算法的下界203

7.4希爾排序203

7.4.1算法204

7.4.2希爾排序的最壞情況分析204

7.5堆排序206

7.5.1算法206

7.5.2堆排序的分析207

7.6歸並排序209

7.6.1算法209

7.6.2歸並排序的分析211

7.7快速排序213

7.7.1選取軸值214

7.7.2劃分策略216

7.7.3小數組217

7.7.4實際的快速排序程序217

7.7.5快速排序的分析219

7.7.6選擇問題的期望線性時間算法221

7.8排序算法的一般下界222

7.9選擇問題的判定樹下界224

7.10對手下界225

7.11線性時間排序: 桶式排序和基數排序227

7.12外部排序231

7.12.1為什麼需要新算法231

7.12.2外部排序模型231

7.12.3簡單算法232

7.12.4多路合並232

7.12.5多相合並233

7.12.6替換選擇234

小結235

練習235

參考文獻240

第8章不相交集類241

8.1等價關系241

8.2動態等價問題241

8.3基本數據結構243

8.4靈活的union算法245

8.5路徑壓縮246

8.6按秩合並與路徑壓縮的最壞情況248

8.6.1緩慢增長的函數248

8.6.2通過遞歸分解進行分析248

8.6.3O(MlogN)界254

8.6.4O(Mα(M, N))界254

8.7應用255

小結257

練習257

參考文獻258

第9章圖論算法260

9.1相關定義260

9.2拓撲排序262

9.3最短路徑算法264

9.3.1無權最短路徑265

9.3.2Dijkstra算法268

9.3.3具有負值邊的圖272

9.3.4無環圖272

9.3.5所有頂點之間的最短路徑274

9.3.6最短路徑實例275

9.4網絡流問題276

9.5最小生成樹281

9.5.1Prim算法282

9.5.2Kruskal算法283

9.6深度優先搜索與應用284

9.6.1無向圖285

9.6.2雙連通性286

9.6.3歐拉回路288

9.6.4有向圖291

9.6.5查找強連通分量291

9.7NP完全性簡論293

9.7.1難解問題與易解問題293

9.7.2NP問題294

9.7.3NP完全問題294

小結296

練習296

參考文獻301

第10章算法設計技術303

10.1貪心算法303

10.1.1簡單的調度問題304

10.1.2哈夫曼編碼306

10.1.3近似裝箱問題309

10.2分治算法315

10.2.1分治算法的運行時間315

10.2.2最近點對問題317

10.2.3選擇問題319

10.2.4算術問題的理論改進321

10.3動態規劃324

10.3.1用表格代替遞歸324

10.3.2矩陣乘法的運算順序326

10.3.3最優二叉查找樹328

10.3.4所有頂點之間的最短路徑331

10.4隨機算法332

10.4.1隨機數生成器333

10.4.2跳躍表336

10.4.3素數測試339

10.5回溯算法341

10.5.1收費公路重建問題341

10.5.2博弈344

小結349

練習350

參考文獻356

第11章攤還分析358

11.1一個無關的智力問題358

11.2二項隊列359

11.3斜堆362

11.4Fibonacci堆364

11.4.1切斷左式堆中的節點364

11.4.2二項隊列的懶惰合並366

11.4.3Fibonacci堆的基本操作368

11.4.4時間界的證明369

11.5伸展樹370

小結373

練習373

參考文獻375

第12章高級數據結構與實現376

12.1自頂向下伸展樹376

12.2紅黑樹382

12.2.1自底向上插入382

12.2.2自頂向下紅黑樹383

12.2.3自頂向下刪除388

12.3treap樹389

12.4後綴數組和後綴樹391

12.4.1後綴數組392

12.4.2後綴樹394

12.4.3線性時間構建後綴數組和後綴樹395

12.5kd樹404

12.6配對堆406

小結411

練習411

參考文獻414

附錄A類模板的分離式編譯416

A.1全部放入頭文件417

A.2顯式實例化417

索引419

最後瀏覽商品 (20)