目录 1
第1章 算法与数据结构 1
1.1 编程的灵魂——数据结构+算法=程 1
1.2 基本算法 8
1.2.1 枚举 8
1.2.2 贪心法 13
1.2.3 递归与分治法 19
1.2.4 递推 28
1.3 数据结构(1)——入门 34
1.3.1 栈和队列 35
1.3.2 串 44
1.3.3 树和二叉树 50
1.3.4 图及其基本算法 59
1.3.5 排序与检索基本算法 67
1.4 数据结构(2)——拓宽和应用举例 79
1.4.1 并查集 80
1.4.2 堆及其变种 88
1.4.3 字典的两种实现方式:哈希表、二叉搜索树 96
1.4.4 两个特殊树结构:线段树和Trie 107
1.5 动态规划 113
1.5.1 动态规划的两种动机 113
1.5.2 常见模型的分析 122
1.5.3 若干经典问题和常见优化方法 149
1.6 状态空间搜索 159
1.6.1 状态空间 159
1.6.2 盲目搜索算法 160
1.6.3 启发式搜索算法 168
1.6.4 博弈问题算法 175
1.6.5 剪枝 180
1.6.6 专题:路径寻找问题 188
1.6.7 约束满足问题 192
第2章 数学方法与常见模型 203
2.1 代数方法和模型 203
2.2 数论基础 216
2.2.1 素数和整除问题 216
2.2.2 进位制 224
2.2.3 同余模算术 228
2.3 组合数学初步 239
2.3.1 鸽笼原理和Ramsey定理 239
2.3.2 排列组合和容斥原理 240
2.3.3 群论与P61ya定理 245
2.3.4 递推关系与生成函数 254
2.3.5 离散变换与反演 262
2.4 图论基本知识和算法 268
2.4.1 基本概念和定理 268
2.4.2 可行遍性问题简介 272
2.4.3 平面图 280
2.4.4 图的基本算法与应用举例 285
2.5 图论基本算法 299
2.5.1 生成树问题 299
2.5.2 最短路问题 304
2.5.3 网络流问题 315
2.5.4 二分图相关问题和模型 329
第3章 计算几何初步 346
3.1 位置和方向的世界——计算几何的基本问题 346
3.1.1 从相交到左右——基本问题的转化 348
3.1.2 左右和前后——叉积和点积 350
3.2 多边形和多面体的相关问题 361
3.2.1 卫兵问题——多边形和多面体的概念 361
3.2.2 求多边形、多面体的容积和重心;高维情形 367
3.2.3 判点在形内形外形上;多面体的情形 378
3.3 打包裹与制造合金——凸包及其应用 387
3.3.1 凸包的普遍性和广泛应用性;凸的定义与优美性质 387
3.3.2 凸包的实现 391
3.3.3 凸包算法正确性与时间效率 396
3.3.4 应用举例 401
3.3.5 凸多边形的深入讨论 405
3.4 几种常用的特殊算法 410
3.4.1 蛋糕被切成几块?——离散化法 410
3.4.2 切蛋糕的周长和面积——扫除法 412
3.4.3 凸包与快速排序——分治法 414
3.4.4 凸包的又一种求法——增量法 416
3.4.5 专题——随机增量算法 417
参考文献 424