11.7 总结与展望
至此,前11章的讲解就告一段落了。接下来该做什么?按照先后顺序,建议读者做3件事:
巩固前11章的内容。先别急,在继续前进之前,笔者建议大家先把前11章的内容学扎实。什么叫“学扎实”?每章的“小结和习题”部分都有具体描述,这里不再赘述。
但是有一点需要注意:理解一个题解和自己独立推导出所有细节还是不一样的,所以在看完一个难题的题解之后最好把它做两遍:一遍是刚看完题解以后“趁热打铁”,一遍是等忘掉题解后自己从头推导一遍。
学习《算法竞赛入门经典——训练指南》。确保前11章基础扎实之后,推荐学习《算法竞赛入门经典——训练指南》。该书主要是讲解本书前11章中没有涉及的知识点,如表11-3所示。
表11-3 《算法竞赛入门经典——训练指南》知识点介绍
| 内容 | 名称 | 知识点 |
| 第1章 | 算法设计基础 | Floyd判圈算法、扫描法、降维法、LIS的O(nlogn)算法、四边形不等式、Joseph问题的递推解法 |
| 第2章 | 数学基础 | 剩余系和乘法逆、中国剩余定理、离散对数、Nim游戏和Sprague-Grundy定理、马尔科夫过程、置换分解成循环、Burnside引理、Polya定理、高斯消元、高斯-约当消元、矩阵的秩、Q矩阵和快速矩阵幂、三分法求凸函数极值、自适应辛普森公式 |
| 第3章 | 实用数据结构 | ADT、树状数组(BIT)、RMQ问题、线段树、Trie、KMP、Aho-Corasick自动机、后缀数组及LCP、Hash方法、Treap和伸展树,以及用它们实现的名次树和可分裂合并的序列 |
| 第4章 | 几何问题 | 基本向量几何、点和直线的关系、多边形的面积、与圆和球相关的计算、点在多边形内判定、凸包、旋转卡(qia)壳、半平面交、PSLG、三维几何基础、三维凸包 |
| 第5章 | 图论算法与模型 | DFS应用:无向图的割顶和桥、无向图的双连通分量、有向图的强连通分量、2-SAT问题、差分约束系统、最小瓶颈路问题、次小生成树问题、最小有向生成树(树形图)、LCA问题、Kuhn-Munkres算法、稳定婚姻问题、二分图最大匹配的应用(最小覆盖、最大独立集、DAG最小路径覆盖)、Dinic算法和ISAP算法、网络流模型变换技巧(多源多汇、下界、循环流、流量不固定的费用流)和经典应用(最大闭合子图、最大密度子图等) |
| 第6章 | 更多算法专题 | 轮廓线动态规划(包括带连通信息的)、嵌套数据结构(二维线段树等)、分块数据结构、minimax搜索和alpha-beta剪枝、舞蹈链和DLX算法、二维和三维仿射变换及其矩阵、离散化、几何扫描法(包括BST的使用)、运动规划、Pick定理、Lucas定理、高次模方程和原根、多项式乘法与FFT、线性规划 |
学习本书第12章。有了前11章和《算法竞赛入门经典——训练指南》的基础,现在可以去“啃”第12章了。说“啃”,是因为这一章的内容实际上已经不属于入门的范畴,而是一些高级内容,甚至还包括一些世界顶级比赛的压轴题。这样的安排是有意的,因为本书的目的并不仅仅是让读者入门,而是“从入门开始一直伴随读者”。正如第2版前言所说,请把这一章看作是游戏通关之后多出来的Hard模式。
难题主要分为3种。一是需要“生僻知识”的,二是思维难度大的,三是编程实现复杂的。本书第12章在这3种难题中精选了一些值得学习的题目,顺便讲解了相关知识点和解题方法,包括DFA、NFA和正规表达式、DAWG、树的分治、欧拉序列、轻重路径剖分(树链剖分)、LCA转RMQ、Link-Cut树、可持久化数据结构、多边形的布尔运算和偏移、非完美算法等。
准备好了吗?让我们开始迎接真正的挑战吧!
————————————————————
(1) 本题的实现需要注意一些细节,请参考代码仓库。