目 錄
第1章 算法設計基礎 1
1.1 思維的體操 1
1.2 問題求解常見策略 15
1.3 高效算法設計舉例 39
1.4 動態規劃專題 60
1.5 小結與習題 77
第2章 數學基礎 103
2.1 基本計數方法 103
2.2 遞推關係 109
2.3 數論 119
2.3.1 基本概念 119
2.3.2 模方程 126
2.4 組閤遊戲 132
2.5 概率與數學期望 139
2.6 置換及其應用 144
2.7 矩陣和綫性方程組 151
2.8 數值方法簡介 163
2.9 小結與習題 170
第3章 實用數據結構 186
3.1 基礎數據結構迴顧 186
3.1.1 抽象數據類型(ADT) 186
3.1.2 優先隊列 188
3.1.3 並查集 191
3.2 區間信息的維護與查詢 194
3.2.1 二叉索引樹(樹狀數組) 194
3.2.2 RMQ問題 197
3.2.3 綫段樹(1):點修改 199
3.2.4 綫段樹(2):區間修改 202
3.3 字符串(1) 208
3.3.1 Trie 208
3.3.2 KMP算法 211
3.3.3 Aho-Corasick自動機 214
3.4 字符串(2) 219
3.4.1 後綴數組 219
3.4.2 最長公共前綴(LCP) 222
3.4.3 基於哈希值的LCP算法 224
3.5 排序二叉樹 227
3.5.1 基本概念 227
3.5.2 用Treap實現名次樹 230
3.5.3 用伸展樹實現可分裂與閤並的序列 239
3.6 小結與習題 244
第4章 幾何問題 254
4.1 二維幾何基礎 254
4.1.1 基本運算 255
4.1.2 點和直綫 256
4.1.3 多邊形 258
4.1.4 例題選講 259
4.1.5 二維幾何小結 263
4.2 與圓和球有關的計算問題 264
4.2.1 圓的相關計算 264
4.2.2 球麵相關問題 269
4.3 二維幾何常用算法 270
4.3.1 點在多邊形內判定 270
4.3.2 凸包 271
4.3.3 半平麵交 276
4.3.4 平麵區域 282
4.4 三維幾何基礎 286
4.4.1 三維點積 287
4.4.2 三維叉積 288
4.4.3 三維凸包 290
4.4.4 例題選講 292
4.4.5 三維幾何小結 295
4.5 小結與習題 296
第5章 圖論算法與模型 307
5.1 基礎題目選講 307
5.2 深度優先遍曆 310
5.2.1 無嚮圖的割頂和橋 312
5.2.2 無嚮圖的雙連通分量 314
5.2.3 有嚮圖的強連通分量 319
5.2.4 2-SAT問題 323
5.3 最短路問題 327
5.3.1 再談Dijkstra算法 327
5.3.2 再談Bellman-Ford算法 332
5.3.3 例題選講 335
5.4 生成樹相關問題 343
5.5 二分圖匹配 347
5.5.1 二分圖最大匹配 347
5.5.2 二分圖最佳完美匹配 348
5.5.3 穩定婚姻問題 352
5.5.4 常見模型 355
5.6 網絡流問題 357
5.6.1 最短增廣路算法 358
5.6.2 最小費用最大流算法 363
5.6.3 建模與模型變換 365
5.6.4 例題選講 368
5.7 小結與習題 372
第6章 更多算法專題 383
6.1 輪廓綫動態規劃 383
6.2 嵌套和分塊數據結構 389
6.3 暴力法專題 395
6.3.1 路徑尋找問題 395
6.3.2 對抗搜索 400
6.3.3 精確覆蓋問題和DLX算法 406
6.4 幾何專題 412
6.4.1 仿射變換與矩陣 412
6.4.2 離散化和掃描法 414
6.4.3 運動規劃 423
6.5 數學專題 425
6.5.1 小專題集錦 425
6.5.2 快速傅裏葉變換(FFT) 428
6.5.3 綫性規劃 430
6.6 淺談代碼設計與靜態查錯 431
6.6.1 簡單的Bash 431
6.6.2 《仙劍奇俠傳四》之最後的戰役 440
6.7 小結與習題 447
附錄A 訓練指南:使用UVa/LA題庫 481
A.1 UVa在綫比賽推薦 481
A.2 LA套題(ACM/ICPC真題)推薦 482
A.3 UVa在綫比賽單題推薦 483
附錄B Java、C#和Python語言簡介 505
B.1 Java 505
B.2 C# 507
B.3 Python 509
· · · · · · (
收起)
評分
☆☆☆☆☆
1. p149 f(i,j) = f(i-1,j-1)+f(i-1,j)*(i-1) 应该改为 f(i,j) = f(i-1,j-1)*(i-1)+f(i-1,j) ——————————————————————————————
評分
☆☆☆☆☆
1. p149 f(i,j) = f(i-1,j-1)+f(i-1,j)*(i-1) 应该改为 f(i,j) = f(i-1,j-1)*(i-1)+f(i-1,j) ——————————————————————————————
評分
☆☆☆☆☆
1. p149 f(i,j) = f(i-1,j-1)+f(i-1,j)*(i-1) 应该改为 f(i,j) = f(i-1,j-1)*(i-1)+f(i-1,j) ——————————————————————————————
評分
☆☆☆☆☆
1. p149 f(i,j) = f(i-1,j-1)+f(i-1,j)*(i-1) 应该改为 f(i,j) = f(i-1,j-1)*(i-1)+f(i-1,j) ——————————————————————————————
評分
☆☆☆☆☆
1. p149 f(i,j) = f(i-1,j-1)+f(i-1,j)*(i-1) 应该改为 f(i,j) = f(i-1,j-1)*(i-1)+f(i-1,j) ——————————————————————————————