-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:馮舜璽類別:1. -> 程式設計 -> 演算法
譯者:
出版社:電子工業出版社數據結構與算法分析——C++語言描述(第四版) 3dWoo書號: 45031
詢問書籍請說出此書號!

缺書
NT售價: 445

出版日:8/1/2016
頁數:508
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121290572
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

目的/目標
本書是《數據結構與算法分析——C++語言描述》的第四版,論述組織大量數據的方法——數據結構,以及算法運行時間的估計——算法分析。隨著計算機的速度越來越快,對于能夠處理大量輸入數據的程序需求變得日益急迫。可是,由于在輸入量很大時程序的低效率顯得非常突出,因此又要求對效率問題給予更加嚴密的關注。通過在實際編程之前對算法進行分析,學生們可以確定一個特定的解決方案是否可行。例如,在本書中學生可查閱一些特定的問題并看到精心的實現怎樣能夠把處理大量數據的時間限制從若干個世紀減至不到一秒。因此,若無運行時間的闡釋,就不會有算法和數據結構的提出。在某些情況下,對于影響實現的運行時間的一些微小細節都需要認真的探究。
一旦解法被確定,接著就要編寫程序。隨著計算機功能的日益強大,它們必須解決的問題就變得更加龐大和復雜,這就要求開發更加復雜的程序。本書的目標是同時教授學生良好的程序設計技巧和算法分析能力,使他們開發的程序能夠具有最高的效率。
本書適合于高等數據結構課程或是算法分析第一年的研究生課程。學生應該具有中等程度的程序設計知識,包括指針、遞歸以及面向對象程序設計這樣一些內容,此外還要具有一些離散數學的基礎。
處理方法
雖然本書的內容大部分都與語言無關,但是,程序設計還是需要使用某種特定的語言。正如書名指出的,我們為本書選擇了C++。
C++已經成為主流系統編程語言。除修復C語言的許多語法漏洞之外,C++還提供一些直接結構(類和模板)來實現作為抽象數據類型的泛型數據結構。
編寫本書最困難的部分是決定C++所占的篇幅。使用太多C++的特性將使本書難以理解,使用太少又會使讀者得不到比支持類的C語言教材更多的收獲。
我們所采取的做法是以一種基于對象的處理方式展示書中的內容。這樣,本書幾乎不存在對繼承的使用。書中以類模板描述泛型數據結構。一般我們避免深奧的C++特性,但是使用了vector類和string類,如今它們已是C++標準的一部分。本書以前各版通過把類模板接口從其實現中分離出來已經做到了對類模板的實現。雖然這是有爭議的首選方式,但它揭示出編譯器使讀者難以具體使用代碼的一些問題。因此,這一版中聯機代碼把類模板作為一個獨立的單元來介紹,無需接口與實現的分離。第1章提供了用于全書的C++特性的綜述,并描述了我們對類模板的處理方式。附錄A闡述如何能夠重寫類模板以使用分離式編譯。
以C++和Java二者描述的數據結構的完全版可在互聯網上獲得。我們使用類似的編碼約定以使得這兩種語言間平行的結構表現得更加明顯。
第四版最重要的變化概述
本書第四版吸收了大量對錯誤的修正,書中許多部分經過修訂以增加表述的清晰度。此外:
? 第4章包含AVL樹刪除算法的實現,它是一個常常被讀者提出的論題。
? 第5章已被廣泛修訂和擴展,現已包含兩個更新的算法:杜鵑散列和跳房子散列。此外,還添加了論述通用散列的新的一節。對C++中引入的unordered_set和unordered_ map兩個類模板的簡要討論也是新加的內容。
? 第6章基本沒有變化,不過,二叉堆的實現用到了C++11版引入的移動操作(move operation)。
? 現在的第7章增加了基數排序的內容,并添加了新的一節,論述下界的證明。排序的程序用到C++11版中引入的移動操作。
? 第8章使用由Seidel和Sharir所作的新的union/find分析,并證明了O(M?(M, N))的界以代替前面各版較弱的O(M log*N)界。
? 第12章添加了論述后綴樹和后綴數組的材料,包括Karkkainen和Sanders的后綴數組線性時間構建算法(及其實現)。刪除了討論確定性跳躍表和AA樹的兩節。
? 全書所出現的代碼均用C++11作了更新。值得注意的是,這意味著C++11新特性的使用,包括auto關鍵字、范圍for循環、移動構造和賦值,以及統一初始化(uniform initialization)。
內容提要
第1章包含離散數學和遞歸的一些復習材料。我相信熟練處置遞歸唯一的辦法是反復不斷地研讀一些好的用法。因此,除第5章外,遞歸遍及本書每一章的例子之中。另外,第1章還介紹了一些材料,作為對基本C++的回顧,包括在C++類設計中對模板和一些重要結構的討論。
第2章處理算法分析。這一章闡述漸近分析和它的主要弱點。這里提供了許多例子,包括對對數運行時間的深入解釋。通過直觀地把一些簡單遞歸程序轉變成迭代程序而對它們進行分析。介紹了更復雜的分治程序,不過有些分析(求解遞推關系)將推遲到第7章再詳細闡述。
第3章包括表、棧和隊列。這一章包括對STL中vector類和list類的討論,其中涉及到迭代器的一些材料,并提供對STL中vector類和list類的重要子集的實現。
第4章討論樹,重點在查找樹,包括外部查找樹(B樹)。UNIX文件系統和表達式樹是作為例子來使用的。本章還介紹了AVL樹和伸展樹。關于查找樹實現細節的更詳細的處理放在第12章介紹。樹的另外一些內容,如文件壓縮和博弈樹,推遲至第10章討論。外部媒體上的數據結構作為幾章中的最后論題來考慮。STL中set類和map類的討論也在本章進行,其中包括一個重要的例子,該例使用3個分離的映射高效地解決一個問題。
第5章討論散列表,包括諸如分離鏈接法以及線性探測法和平方探測法這樣一些經典算法,此外還有幾個新算法,即杜鵑散列和跳房子散列。通用散列也在這里討論,而對可擴散列的討論則放在本章末尾進行。
第6章是關于優先隊列的。二叉堆也安排在這里,還有些額外的材料論述優先隊列某些理論上有趣的實現。斐波那契堆在第11章討論,配對堆在第12章討論。
第7章是排序。它是關于編程細節和分析的非常特殊的一章。所有重要的通用排序算法均被討論并進行了比較。詳細分析了4種算法:插入排序,希爾排序,堆排序,以及快速排序。本版新增加了基數排序和一些與選擇相關問題的下界證明。外部排序的討論安排在本章的末尾進行。
第8章討論不相交集算法并證明其運行時間。這是短小且特殊的一章,如果不討論Kruskal算法則該章可以跳過。
第9章講授圖論算法。圖論算法的趣味性不僅因為它們在實踐中經常發生,而且還因為它們的運行時間強烈地依賴于數據結構的恰當使用。實際上,所有標準算法都是和相應的數據結構、偽代碼以及運行時間的分析一起介紹的。為把這些問題放在一個適當的上下文環境下,本章對復雜性理論(包括NP完全性和不可判定性)進行了簡要的討論。
第10章通過考查一些常見問題的求解技巧來討論算法設計。這一章通過大量實例而得到強化。這里及后面各章使用的偽代碼使得學生對一個算法實例的理解不至于被實現的細節所困擾。
第11章處理攤還分析。對來自第4章和第6章的3種數據結構以及本章介紹的斐波那契堆進行了分析。
第12章討論查找樹算法、后綴樹和后綴數組、k-d樹、配對堆。不同于其他各章,本章為查找樹和配對堆提供了完全和審慎的實現。材料的安排使得教師可以把一些內容整合到其他各章的討論中。例如,第12章中的自頂向下紅黑樹可以和AVL樹(第4章的)一起討論。
第1章∼第9章為大多數一學期的數據結構課程提供了足夠的材料。如果時間允許,那么第10章也可以包括進來。研究生的算法分析課程可以使用第7章∼第11章的內容。在第11章所分析的高級數據結構可以容易地在前面各章中查到。第9章中對NP完全性的討論太過簡單,以至于不足以用于這樣的一門算法分析課程。讀者將會發現,參閱一些論述NP完全性的著述對深化本書內容大有裨益。
練習
在每章末尾提供的練習與正文中講授內容的順序相匹配。最后的一些練習是把一章作為一個整體來處理而不是針對特定的某一節來考慮的。難做的練習標以一個星號,更難的練習標注兩個星號。
參考文獻
參考文獻列于每章的最后。一般說來,這些參考文獻或者是歷史性質的,代表著書中材料的原始來源,或者闡述對正文中給出結果的擴展和改進。有些文獻提供一些練習的解法。
M.A.W.
Miami,Florida
內容簡介:

本書是數據結構和算法分析的經典教材,書中使用主流的程序設計語言C++作為具體的實現語言。書中內容包括表、棧、隊列、樹、散列表、優先隊列、排序、不相交集算法、圖論算法、算法分析、算法設計、攤還分析、查找樹算法、k-d樹和配對堆等。本書把算法分析與C++程序的開發有機地結合起來,深入分析每種算法,內容全面、縝密嚴格,并細致講解精心構造程序的方法。

目錄:

第1章 程序設計:綜述 1
1.1 本書討論的內容 1
1.2 數學知識復習 2
1.2.1 指數(exponent) 2
1.2.2 對數(logarithm) 2
1.2.3 級數(series) 3
1.2.4 模運算(modular arithmetic) 4
1.2.5 證明方法 5
1.3 遞歸簡論 7
1.4 C++類 10
1.4.1 基本的class語法 10
1.4.2 構造函數的附加語法和訪問
函數 11
1.4.3 接口與實現的分離 13
1.4.4 vector類和string類 16
1.5 C++細節 17
1.5.1 指針(pointer) 18
1.5.2 左值、右值和引用 19
1.5.3 參數傳遞 21
1.5.4 返回值傳遞 23
1.5.5 std::swap和std::move 25
1.5.6 五大函數:析構函數,拷貝構造
函數,移動構造函數,拷貝賦值
operator=,移動賦值operator= 26
1.5.7 C風格數組和字符串 30
1.6 模板 31
1.6.1 函數模板 31
1.6.2 類模板 32
1.6.3 Object、Comparable和一個
例子 33
1.6.4 函數對象 34
1.6.5 類模板的分離式編譯 37
1.7 使用矩陣 37
1.7.1 數據成員、構造函數和基本訪問
函數 38
1.7.2 operator[] 38
1.7.3 五大函數 39
小結 39
練習 39
參考文獻 41
第2章 算法分析 42
2.1 數學基礎 42
2.2 模型 44
2.3 要分析的問題 44
2.4 運行時間計算 47
2.4.1 一個簡單的例子 47
2.4.2 一般法則 47
2.4.3 最大子序列和問題的求解 49
2.4.4 運行時間中的對數 54
2.4.5 最壞情形分析的局限性 57
小結 58
練習 58
參考文獻 63
第3章 表、棧和隊列 64
3.1 抽象數據類型(ADT) 64
3.2 表ADT 64
3.2.1 表的簡單數組實現 65
3.2.2 簡單鏈表 65
3.3 STL中的vector和list 67
3.3.1 迭代器 68
3.3.2 例子:對表使用erase 69
3.3.3 const_iterators 70
3.4 vector的實現 72
3.5 list的實現 76
3.6 棧ADT 86
3.6.1 棧模型 86
3.6.2 棧的實現 86
3.6.3 應用 87
3.7 隊列ADT 93
3.7.1 隊列模型 93
3.7.2 隊列的數組實現 93
3.7.3 隊列的應用 95
小結 96
練習 96
第4章 樹 100
4.1 預備知識 100
4.1.1 樹的實現 101
4.1.2 樹的遍歷及應用 102
4.2 二叉樹 105
4.2.1 實現 105
4.2.2 一個例子——表達式樹 105
4.3 查找樹ADT——二叉查找樹 108
4.3.1 contains 110
4.3.2 findMin和findMax 111
4.3.3 insert 112
4.3.4 remove 113
4.3.5 析構函數和拷貝構造函數 115
4.3.6 平均情況分析 115
4.4 AVL樹 118
4.4.1 單旋轉 119
4.4.2 雙旋轉 121
4.5 伸展樹 128
4.5.1 一個簡單的想法(不能直接
使用) 128
4.5.2 展開 130
4.6 樹的遍歷 134
4.7 B樹 135
4.8 標準庫中的集合與映射 140
4.8.1 集合(set) 140
4.8.2 映射(map) 141
4.8.3 set和map的實現 142
4.8.4 使用多個映射(map)的例 142
小結 147
練習 147
參考文獻 153
第5章 散列 155
5.1 一般想法 155
5.2 散列函數 155
5.3 分離鏈接法 157
5.4 不用鏈表的散列表 161
5.4.1 線性探測法 161
5.4.2 平方探測法 163
5.4.3 雙散列 166
5.5 再散列 167
5.6 標準庫中的散列表 169
5.7 以最壞情形O(1)訪問的散列表 170
5.7.1 完美散列 170
5.7.2 杜鵑散列 172
5.7.3 跳房子散列 181
5.8 通用散列 184
5.9 可擴散列 186
小結 188
練習 189
參考文獻 193
第6章 優先隊列(堆) 196
6.1 模型 196
6.2 一些簡單的實現 197
6.3 二叉堆 197
6.3.1 結構性質 197
6.3.2 堆序性質 198
6.3.3 基本的堆操作 199
6.3.4 其他的堆操作 203
6.4 優先隊列的應用 206
6.4.1 選擇問題 206
6.4.2 事件模擬 207
6.5 d堆 208
6.6 左式堆 209
6.6.1 左式堆的性質 209
6.6.2 左式堆操作 210
6.7 斜堆 215
6.8 二項隊列 216
6.8.1 二項隊列構建 216
6.8.2 二項隊列操作 217
6.8.3 二項隊列的實現 219
6.9 標準庫中的優先隊列 224
小結 225
練習 225
參考文獻 229
第7章 排序 232
7.1 預備知識 232
7.2 插入排序 233
7.2.1 算法 233
7.2.2 插入排序的STL實現 233
7.2.3 插入排序的分析 235
7.3 一些簡單排序算法的下界 235
7.4 希爾排序 236
7.4.1 希爾排序的最壞情形分析 237
7.5 堆排序 239
7.5.1 堆排序的分析 241
7.6 歸并排序 242
7.6.1 歸并排序的分析 245
7.7 快速排序 247
7.7.1 選取樞紐元 249
7.7.2 分割策略 250
7.7.3 小數組 252
7.7.4 實際的快速排序例程 252
7.7.5 快速排序的分析 254
7.7.6 選擇問題的線性期望時間
算法 256
7.8 排序算法的一般下界 258
7.8.1 決策樹 258
7.9 選擇問題的決策樹下界 260
7.10 對手下界(adversary lower
bounds) 262
7.11 線性時間排序:桶式排序和
基數排序 265
7.12 外部排序 269
7.12.1 為什么需要一些新的算法 269
7.12.2 外部排序模型 269
7.12.3 簡單算法 269
7.12.4 多路合并 270
7.12.5 多相合并 271
7.12.6 替換選擇 272
小結 273
練習題 273
參考文獻 278
第8章 不相交集類 281
8.1 等價關系 281
8.2 動態等價性問題 281
8.3 基本數據結構 283
8.4 靈巧求并算法 286
8.5 路徑壓縮 288
8.6 按秩求并和路徑壓縮的最壞
情形 289
8.6.1 緩慢增長的函數 289
8.6.2 通過遞歸分解進行的分析 290
8.6.3 一個O(M log*N)界 295
8.6.4 一個O(Mα(M, N))界 296
8.7 一個應用 297
小結 299
練習 299
參考文獻 301
第9章 圖論算法 303
9.1 若干定義 303
9.1.1 圖的表示 304
9.2 拓撲排序 305
9.3 最短路徑算法 308
9.3.1 無權最短路徑 309
9.3.2 Dijkstra算法 312
9.3.3 具有負邊值的圖 317
9.3.4 無圈圖 318
9.3.5 所有頂點對間的最短路徑 320
9.3.6 最短路徑的例 320
9.4 網絡流問題 322
9.4.1 一個簡單的最大流算法 323
9.5 最小生成樹 326
9.5.1 Prim算法 327
9.5.2 Kruskal算法 329
9.6 深度優先搜索的應用 330
9.6.1 無向圖 331
9.6.2 雙連通性 332
9.6.3 歐拉回路 335
9.6.4 有向圖 338
9.6.5 查找強分支 339
9.7 NP完全性介紹 340
9.7.1 難與易 341
9.7.2 NP類 341
9.7.3 NP完全問題 342
小結 344
練習 344
參考文獻 350
第10章 算法設計技巧 353
10.1 貪婪算法 353
10.1.1 一個簡單的調度問題 354
10.1.2 哈夫曼編碼 355
10.1.3 近似裝箱問題 359
10.2 分治算法 366
10.2.1 分治算法的運行時間 367
10.2.2 最近點問題 369
10.2.3 選擇問題 371
10.2.4 一些算術問題的理論改進 374
10.3 動態規劃 377
10.3.1 用表代替遞歸 377
10.3.2 矩陣乘法的順序安排 379
10.3.3 最優二叉查找樹 382
10.3.4 所有點對最短路徑 384
10.4 隨機化算法 386
10.4.1 隨機數發生器 387
10.4.2 跳躍表 392
10.4.3 素性測試 393
10.5 回溯算法 396
10.5.1 收費公路重建問題 396
10.5.2 博弈 400


小結 405
練習 406
參考文獻 413
第11章 攤還分析 418
11.1 一個無關的智力問題 418
11.2 二項隊列 419
11.3 斜堆 423
11.4 斐波那契堆 425
11.4.1 切除左式堆中的節點 425
11.4.2 二項隊列的懶惰合并 427
11.4.3 斐波那契堆操作 429
11.4.4 時間界的證明 430
11.5 伸展樹 432
小結 436
練習 436
參考文獻 437
第12章 高級數據結構及其實現 439
12.1 自頂向下伸展樹 439
12.2 紅黑樹 445
12.2.1 自底向上的插入 446
12.2.2 自頂向下紅黑樹 447
12.2.3 自頂向下刪除 452
12.3 treap樹 453
12.4 后綴數組和后綴樹 456
12.4.1 后綴數組 456
12.4.2 后綴樹 458
12.4.3 后綴數組和后綴樹的線性
時間構建 461
12.5 k-d樹 471
12.6 配對堆 474
小結 479
練習 479
參考文獻 483
附錄A 類模板的分離式編譯 486
索引 489
序: