算法導論.pdf
內容簡介 · · · · · ·
在有關算法的書中,有一些敘述非常嚴謹,但不夠全面;另一些涉及了大量的題材,但又缺乏嚴謹性。本書將嚴謹性和全面性融為一體,深入討論各類算法,並著力使這些算法的設計和分析能為各個層次的讀者接受。全書各章自成體系,可以作為獨立的學習單元;算法以英語和偽代碼的形式描述,具備初步程序設計經驗的人就能看懂;說明和解釋力求淺顯易懂,不失深度和數學嚴謹性。
全書選材經典、內容豐富、結構合理、邏輯清晰,對本科生的數據結構課程和研究生的算法課程都是非常實用的教材,在IT專業人員的職業生涯中,本書也是一本案頭必備的參考書或工程實踐手冊。
第3版的主要變化:
新增了van Emde Boas樹和多線程算法,並且將矩陣基礎移至附錄。
修訂了遞歸式(現在稱為“分治策略”)那一章的內容,更廣泛地覆蓋分治法。
移除兩章很少講授的內容:二項堆和排序網絡。
修訂了動態規劃和貪心算法相關內容。
流網絡相關材料現在基於邊上的全部流。
由於關於矩陣基礎和Strassen算法的材料移到了其他章,矩陣運算這一章的內容所占篇幅更小。
修改了對Knuth-Morris-Pratt字符串匹配算法的討論。
新增100道練習和28道思考題,還更新並補充了參考文獻。
作者簡介 · · · · · ·
Thomas H. Cormen (托馬斯?科爾曼) 達特茅斯學院計算機科學系教授、系主任。目前的研究興趣包括:算法工程、並行計算、具有高延遲的加速計算。他分別於1993年、1986年獲得麻省理工學院電子工程和計算機科學博士、碩士學位,師從Charles E. Leiserson教授。由於他在計算機教育領域的突出貢獻,Cormen教授榮獲2009年ACM傑出教員獎。
Charles E. Leiserson(查爾斯?雷瑟爾森)麻省理工學院計算機科學與電氣工程系教授,Margaret MacVicar Faculty Fellow。他目前主持MIT超級計算技術研究組,並是MIT計算機科學和人工智能實驗室計算理論研究組的成員。他的研究興趣集中在並行和分布式計算的理論原理,尤其是與工程現實相關的技術研究。Leiserson教授擁有卡內基?梅隆大學計算機科學博士學位,還是ACM、IEEE和SIAM的會士。
Ronald L. Rivest (羅納德?李維斯特)現任麻省理工學院電子工程和計算機科學系安德魯與厄納?維特爾比(Andrew and Erna Viterbi)教授。他是MIT計算機科學和人工智能實驗室的成員,並領導著其中的信息安全和隱私中心。他1977年從斯坦福大學獲得計算機博士學位,主要從事密碼安全、計算機安全算法的研究。他和Adi Shamir和Len Adleman一起發明了RSA公鑰算法,這個算法在信息安全中獲得最大的突破,這一成果也使他和Shamir、Adleman一起得到2002年ACM圖靈獎。他現在擔任國家密碼學會的負責人。
Clifford Stein(克利福德?斯坦)哥倫比亞大學計算機科學系和工業工程與運籌學系教授,他還是工業工程與運籌學系的系主任。在加入哥倫比亞大學大學之前,他在達特茅斯學院計算機科學系任教9年。Stein教授擁有MIT碩士和博士學位。他的研究興趣包括:算法的設計與分析,組合優化、運籌學、網絡算法、調度、算法工程和生物計算。
目錄 · · · · · ·
出版者的話譯者序
前言
第一部分 基礎知識
第1章 算法在計算中的作用 3
1.1 算法 3
1.2 作為一種技術的算法 6
思考題 8
本章註記 8
第2章 算法基礎 9
2.1 插入排序 9
2.2 分析算法 13
2.3 設計算法 16
2.3.1 分治法 16
2.3.2 分析分治算法 20
思考題 22
本章註記 24
第3章 函數的增長 25
3.1 漸近記號 25
3.2 標準記號與常用函數 30
思考題 35
本章註記 36
第4章 分治策略 37
4.1 最大子數組問題 38
4.2 矩陣乘法的Strassen算法 43
4.3 用代入法求解遞歸式 47
4.4 用遞歸樹方法求解遞歸式 50
4.5 用主方法求解遞歸式 53
4.6 證明主定理 55
4.6.1 對b的冪證明主定理 56
4.6.2 向下取整和向上取整 58
思考題 60
本章註記 62
第5章 概率分析和隨機算法 65
5.1 雇用問題 65
5.2 指示器隨機變量 67
5.3 隨機算法 69
5.4 概率分析和指示器隨機變量的進一步使用 73
5.4.1 生日悖論 73
5.4.2 球與箱子 75
5.4.3 特征序列 76
5.4.4 在線雇用問題 78
思考題 79
本章註記 80
第二部分 排序和順序統計量
第6章 堆排序 84
6.1 堆 84
6.2 維護堆的性質 85
6.3 建堆 87
6.4 堆排序算法 89
6.5 優先隊列 90
思考題 93
本章註記 94
第7章 快速排序 95
7.1 快速排序的描述 95
7.2 快速排序的性能 97
7.3 快速排序的隨機化版本 100
7.4 快速排序分析 101
7.4.1 最壞情況分析 101
7.4.2 期望運行時間 101
思考題 103
本章註記 106
第8章 線性時間排序 107
8.1 排序算法的下界 107
8.2 計數排序 108
8.3 基數排序 110
8.4 桶排序 112
思考題 114
本章註記 118
第9章 中位數和順序統計量 119
9.1 最小值和最大值 119
9.2 期望為線性時間的選擇算法 120
9.3 最壞情況為線性時間的選擇算法 123
思考題 125
本章註記 126
第三部分 數據結構
第10章 基本數據結構 129
10.1 棧和隊列 129
10.2 鏈表 131
10.3 指針和對象的實現 134
10.4 有根樹的表示 137
思考題 139
本章註記 141
第11章 散列表 142
11.1 直接尋址表 142
11.2 散列表 143
11.3 散列函數 147
11.3.1 除法散列法 147
11.3.2 乘法散列法 148
11.3.3 全域散列法 148
11.4 開放尋址法 151
11.5 完全散列 156
思考題 158
本章註記 160
第12章 二叉搜索樹 161
12.1 什麽是二叉搜索樹 161
12.2 查詢二叉搜索樹 163
12.3 插入和刪除 165
12.4 隨機構建二叉搜索樹 169
思考題 171
本章註記 173
第13章 紅黑樹 174
13.1 紅黑樹的性質 174
13.2 旋轉 176
13.3 插入 178
13.4 刪除 183
思考題 187
本章註記 191
第14章 數據結構的擴張 193
14.1 動態順序統計 193
14.2 如何擴張數據結構 196
14.3 區間樹 198
思考題 202
本章註記 202
第四部分 高級設計和分析技術
第15章 動態規劃 204
15.1 鋼條切割 204
15.2 矩陣鏈乘法 210
15.3 動態規劃原理 215
15.4 最長公共子序列 222
15.5 最優二叉搜索樹 226
思考題 231
本章註記 236
第16章 貪心算法 237
16.1 活動選擇問題 237
16.2 貪心算法原理 242
16.3 赫夫曼編碼 245
16.4 擬陣和貪心算法 250
16.5 用擬陣求解任務調度問題 253
思考題 255
本章註記 257
第17章 攤還分析 258
17.1 聚合分析 258
17.2 核算法 261
17.3 勢能法 262
17.4 動態表 264
17.4.1 表擴張 265
17.4.2 表擴張和收縮 267
思考題 270
本章註記 273
第五部分 高級數據結構
第18章 B樹 277
18.1 B樹的定義 279
18.2 B樹上的基本操作 281
18.3 從B樹中刪除關鍵字 286
思考題 288
本章註記 289
第19章 斐波那契堆 290
19.1 斐波那契堆結構 291
19.2 可合並堆操作 292
19.3 關鍵字減值和刪除一個結點 298
19.4 最大度數的界 300
思考題 302
本章註記 305
第20章 van Emde Boas樹 306
20.1 基本方法 306
20.2 遞歸結構 308
20.2.1 原型van Emde Boas結構 310
20.2.2 原型van Emde Boas結構上的操作 311
20.3 van Emde Boas樹及其操作 314
20.3.1 van Emde Boas樹 315
20.3.2 van Emde Boas樹的操作 317
思考題 322
本章註記 323
第21章 用於不相交集合的數據結構 324
21.1 不相交集合的操作 324
21.2 不相交集合的鏈表表示 326
21.3 不相交集合森林 328
21.4 帶路徑壓縮的按秩合並的分析 331
思考題 336
本章註記 337
第六部分 圖算法
第22章 基本的圖算法 341
22.1 圖的表示 341
22.2 廣度優先搜索 343
22.3 深度優先搜索 349
22.4 拓撲排序 355
22.5 強連通分量 357
思考題 360
本章註記 361
第23章 最小生成樹 362
23.1 最小生成樹的形成 362
23.2 Kruskal算法和Prim算法 366
思考題 370
本章註記 373
第24章 單源最短路徑 374
24.1 Bellman-Ford算法 379
24.2 有向無環圖中的單源最短路徑問題 381
24.3 Dijkstra算法 383
24.4 差分約束和最短路徑 387
24.5 最短路徑性質的證明 391
思考題 395
本章註記 398
第25章 所有結點對的最短路徑問題 399
25.1 最短路徑和矩陣乘法 400
25.2 Floyd-Warshall算法 404
25.3 用於稀疏圖的Johnson算法 409
思考題 412
本章註記 412
第26章 最大流 414
26.1 流網絡 414
26.2 Ford\Fulkerson方法 418
26.3 最大二分匹配 428
26.4 推送重貼標簽算法 431
26.5 前置重貼標簽算法 438
思考題 446
本章註記 449
第七部分 算法問題選編
第27章 多線程算法 453
27.1 動態多線程基礎 454
27.2 多線程矩陣乘法 465
27.3 多線程歸並排序 468
思考題 472
本章註記 476
第28章 矩陣運算 478
28.1 求解線性方程組 478
28.2 矩陣求逆 486
28.3 對稱正定矩陣和最小二乘逼近 489
思考題 493
本章註記 494
第29章 線性規劃 495
29.1 標準型和松弛型 499
29.2 將問題表達為線性規劃 504
29.3 單純形算法 507
29.4 對偶性 516
29.5 初始基本可行解 520
思考題 525
本章註記 526
第30章 多項式與快速傅裏葉變換 527
30.1 多項式的表示 528
30.2 DFT與FFT 531
30.3 高效FFT實現 536
思考題 539
本章註記 541
第31章 數論算法 543
31.1 基礎數論概念 543
31.2 最大公約數 547
31.3 模運算 550
31.4 求解模線性方程 554
31.5 中國余數定理 556
31.6 元素的冪 558
31.7 RSA公鑰加密系統 561
31.8 素數的測試 565
31.9 整數的因子分解 571
思考題 574
本章註記 576
第32章 字符串匹配 577
32.1 樸素字符串匹配算法 578
32.2 Rabin\Karp算法 580
32.3 利用有限自動機進行字符串匹配 583
32.4 Knuth-Morris-Pratt算法 588
思考題 594
本章註記 594
第33章 計算幾何學 595
33.1 線段的性質 595
33.2 確定任意一對線段是否相交 599
33.3 尋找凸包 604
33.4 尋找最近點對 610
思考題 613
本章註記 615
第34章 NP完全性 616
34.1 多項式時間 619
34.2 多項式時間的驗證 623
34.3 NP完全性與可歸約性 626
34.4 NP完全性的證明 633
34.5 NP完全問題 638
34.5.1 團問題 638
34.5.2 頂點覆蓋問題 640
34.5.3 哈密頓回路問題 641
34.5.4 旅行商問題 644
34.5.5 子集和問題 645
思考題 647
本章註記 649
第35章 近似算法 651
35.1 頂點覆蓋問題 652
35.2 旅行商問題 654
35.2.1 滿足三角不等式的旅行商問題 654
35.2.2 一般旅行商問題 656
35.3 集合覆蓋問題 658
35.4 隨機化和線性規劃 661
35.5 子集和問題 663
思考題 667
本章註記 669
第八部分 附錄:數學基礎知識
附錄A 求和 672
A.1 求和公式及其性質 672
A.2 確定求和時間的界 674
思考題 678
附錄註記 678
附錄B 集合等離散數學內容 679
B.1 集合 679
B.2 關系 682
B.3 函數 683
B.4 圖 685
B.5 樹 687
B.5.1 自由樹 688
B.5.2 有根樹和有序樹 689
B.5.3 二叉樹和位置樹 690
思考題 691
附錄註記 692
附錄C 計數與概率 693
C.1 計數 693
C.2 概率 696
C.3 離散隨機變量 700
C.4 幾何分布與二項分布 702
C.5 二項分布的尾部 705
思考題 708
附錄註記 708
附錄D 矩陣 709
D.1 矩陣與矩陣運算 709
D.2 矩陣基本性質 712
思考題 714
附錄註記 715
參考文獻 716
索引 732
下載地址:網盤下載
算法導論.pdf