內容簡介
全書共8章,內容包括算法基礎、基本算法設計和分析技術(分治法、動態規劃、貪心法、回溯法和分枝限界法)、圖算法以及NP完全性理論。
本書可作為高等院校與計算機相關的各專業“算法設計”課程的教材,也可作為計算機領域的相關科研人員的參考書。此外,本書還可供參加ACM程式設計大賽的算法愛好者參考
目錄
第1章 算法基礎 1
1.1 算法 1
1.1.1 冒泡排序 1
1.1.2 循環不變式和冒泡排序算法的正確性 2
1.1.3 偽代碼使用約定 3
1.2 算法分析 4
1.2.1 冒泡排序算法分析 5
1.2.2 最壞情況和平均情況分析 6
1.2.3 增長的數量級 6
1.3 算法的運行時間 7
1.3.1 函式增長 7
1.3.2 漸近表示 8
習題 10
第2章 分治法 13
2.1 遞歸與遞歸方程 13
2.1.1 遞歸的概念 13
2.1.2 替換方法 16
2.1.3 遞歸樹方法 17
2.1.4 主方法 18
2.2 分治法 20
2.2.1 分治法的基本思想 20
2.2.2 二叉查找算法 21
2.3 分治法套用實例 24
2.3.1 找最大值與最小值 24
2.3.2 Strassen矩陣乘法 26
2.3.3 整數相乘 27
2.3.4 歸併排序 28
2.3.5 快速排序 33
2.3.6 線性時間選擇 37
2.3.7 最近點對問題 41
習題 44
第3章 動態規劃 49
3.1 用表代替遞歸 49
3.2 0-1背包問題 52
3.3 矩陣鏈乘問題 54
3.4 動態規劃的基本元素 60
3.5 備忘錄方法 64
3.6 裝配線調度問題 70
3.7 最長公共子序列 73
3.8 最優二分檢索樹 77
3.9 凸多邊形最優三角剖分 84
習題 88
第4章 貪心法 98
4.1 背包問題 98
4.2 活動選擇問題 101
4.3 貪心算法的基本元素 105
4.4 哈夫曼編碼 107
4.5 最小生成樹算法 113
4.5.1 最小生成樹的基本原理 113
4.5.2 Kruskal算法 116
4.5.3 Prim算法 120
4.5.4 Boruvka算法 124
4.5.5 比較與改進 126
4.6 貪心算法的理論基礎 126
4.7 作業調度問題 130
習題 131
第5章 回溯法 136
5.1 回溯法的基本原理 136
5.2 n皇后問題 140
5.3 子集和數問題 143
5.4 0-1背包問題 146
5.5 著色問題 149
習題 152
第6章 分枝限界法 155
6.1 分枝限界法的基本思想 155
6.2 0-1背包問題 159
6.3 作業調度問題 167
習題 170
第7章 圖算法 172
7.1 圖的表示 172
7.2 廣度優先搜尋 173
7.3 Dijkstra算法 175
7.4 BellmanFord算法 182
7.5 FloydWarshall算法 184
習題 185
第8章 NP完全性 189
8.1 P類問題和NP類問題 189
8.1.1 複雜類P和複雜類NP 190
8.1.2 NP中的有趣問題 192
8.2 NP完全性 194
8.2.1 多項式時間歸約和NP難度 194
8.2.2 Cook定理 195
8.3 典型的NP完全問題 196
8.3.1 CNF3SAT問題和3SAT問題 198
8.3.2 頂點覆蓋問題 200
8.3.3 團問題和集合覆蓋問題 202
8.3.4 子集和數問題與背包問題 203
8.3.5 哈密爾頓迴路問題和TSP問題 205
習題 208
附錄A 習題選解 211
附錄B 索引 226
參考文獻 231