ACM竞赛代码整理:基础算法与数据结构

需积分: 18 7 下载量 60 浏览量 更新于2024-07-28 4 收藏 336KB PDF 举报
"这是一份ACM竞赛代码整理的PDF文档,版本0.6,由Tiaotiao编撰。文档包含基础算法、数据结构、图论和计算几何等多个章节,旨在帮助参赛者准备ACM编程竞赛。" 文档中详细列举了各种常用的算法和数据结构模板,对于学习和理解ACM竞赛中的核心知识非常有帮助。 ### 第一章 基础算法 1. **常用宏定义**:提供了如`clr()`用于数组清零,`cpy()`用于数组复制,以及数学运算和比较的宏定义,便于快速编写代码。 2. **欧几里德算法**:用于计算两个整数的最大公约数(GCD)。 3. **快速排序**:经典的排序算法,采用分治策略,效率高但不稳定。 4. **快速排序(通用版)**:在基本快速排序的基础上进行了改进,可能包含了对原快速排序的优化,如三数取中、随机化选取枢轴等。 5. **第K小元素**:寻找数组中的第K小元素,可以利用快速选择或优先队列实现。 6. **LIS(最长上升子序列)O(NLOGN)**:求解一个序列中最长的上升子序列,通常使用动态规划解决。 7. **RMQ(区间最值询问)**:在线性时间预处理后,可以快速查询区间内的最大值或最小值。 8. **KMP模式匹配**:字符串匹配算法,避免了不必要的回溯,提高了效率。 9. **字符串最小表示**:可能涉及到最小字典序的子串查找或压缩。 ### 第二章 数据结构 1. **并查集**:用于处理不相交集合的合并与查询,常用于解决联通性问题。 2. **HEAP(最小堆)**:一种特殊的完全二叉树,满足堆性质,常用于优先队列和求最小值。 3. **树状数组**(线段树):用于高效地进行区间更新和查询操作。 4. **二维树状数组**:扩展了树状数组,支持二维区间操作。 5. **TRIE(字典树)**:用于存储字符串,便于进行前缀匹配和插入查找操作。 6. **后缀数组**:用于处理字符串,可以快速找到所有后缀的排序。 7. **LCP(最长公共前缀)**:求解字符串数组中每对相邻字符串的最长公共前缀。 ### 第三章 图论 1. **BELLMAN-FORD**:求解图中的负权边最短路径问题,能检测负权环。 2. **BELLMAN-FORD(队列优化)**:对原算法的优化,可能通过队列加速。 3. **Dijkstra+HEAP(最短路径)**:使用贪心策略的Dijkstra算法配合最小堆求解单源最短路径。 4. **二分图最大匹配**:采用匈牙利算法或增广路算法解决二分图的最大匹配问题。 5. **带权二分图最大匹配**:在考虑边权重的情况下求解最大匹配。 6. **最小路径覆盖**:找到图中覆盖所有顶点的最小路径集合。 7. **稳定婚姻问题**:Gale-Shapley算法解决稳定匹配问题。 8. **拓扑排序**:对有向无环图(DAG)的顶点进行线性排序。 9. **LCA(最近公共祖先)**:找到树中两个节点的最近公共祖先,这里使用了Tarjan算法。 10. **最大流**:网络流问题,求解在一个有向图中从源点到汇点的最大流量。 11. **最小费用最大流**:在求最大流的同时考虑边的费用,寻找最小总费用的流。 12. **求割点和桥**:识别图中删除某个节点或边会导致连通性改变的关键元素。 13. **无向图的块**:无向图的连通分量划分。 14. **极大双连通分量**:图中最大的双连通子图。 15. **极大强连通分量**:图中最大的强连通子图。 16. **极大强连通分量缩点**:将极大强连通分量合并成一个节点,简化图的结构。 17. **2-SAT判定**:2-SAT问题是一个布尔逻辑满足性问题,可以判断是否存在一组分配使得所有子句都为真。 ### 第五章 计算几何 1. **三维凸包**:在三维空间中找到一组点的最小凸多面体,通常使用格雷码或其他高效算法。 这份文档详细地涵盖了ACM竞赛中常见的算法和数据结构,对于准备参赛的学生或者想要深入学习算法的开发者来说,是一份宝贵的参考资料。
2018-11-13 上传
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)   排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排  序,外部排序)   数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理) 指针(链表,搜索判重,邻接表,开散列,二叉树的表示,多叉树的表示) 按位运算(and,or,xor,shl,shr,一些应用) 图论(图论模型的建立,平面图,欧拉公式与五色定理,求强连通分量,求割点和桥,欧拉回路,AOV问题,AOE问题,最小生成树的三种算法,最短路的三种算法,标号法,差分约束系统,验证二分图,Konig定理,匈牙利算法,KM算法,稳定婚姻系统,最大流算法,最小割最大流定理,最小费用最大流算法) 计算几何(平面解几及其应用,向量,点积及其应用,叉积及其应用,半平面相交,求点集的凸包,最近点对问题,凸多边形的交,离散化与扫描) 数据结构(广度优先搜索,验证括号匹配,表达式计算,递归的编译,Hash表,分段Hash,并查集,Tarjan算法,二叉堆,左偏树,二斜堆,二项堆,二叉查找树,红黑树,AVL平衡树,Treap,Splay,静态二叉查找树,2-d树,线段树,二维线段树,矩形树,Trie树,块状链表) 组合数学(排列与组合,鸽笼原理,容斥原理,递推,Fibonacci数列,Catalan数列,Stirling数,差分序列,生成函数,置换,Polya原理) 概率论(简单概率,条件概率,Bayes定理,期望值) 矩阵(矩阵的概念和运算,二分求解线性递推方程,多米诺骨牌棋盘覆盖方案数,高斯消元) 字符串处理(KMP,后缀树,有限状态自动机,Huffman编码,简单密码学) 动态规划(单调队列,凸完全单调性,树型动规,多叉转二叉,状态压缩类动规,四边形不等式) 博奕论(Nim取子游戏,博弈树,Shannon开关游戏) 搜索(A*,ID,IDA*,随机调整,遗传算法)