1. 程式人生 > >《演算法導論(原書第3版)》pdf

《演算法導論(原書第3版)》pdf

出版者的話
譯者序
前言
第一部分 基礎知識
第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