3. 专题和知识点详细内容
下面用表格的形式列出了竞赛中用到的算法知识点,约300个。
本文作者估计,铜牌和银牌需要约200个知识点,其他的是金牌。
**注:**表格中的“典型题”,不一定是模板题,只作为进一步了解的参考。
3.1. 数学Mathematics
3.1.1数论Number Theory
知识点 | 英文 | 典型题 | 说明 | |
---|
GCD、LCM | | | | 1 |
素数判断 | Primality tests | poj 2689 | 判断某个数是否为素数计算区间内素数的个数 | 1 |
素数生成 | Prime Number Generation | hdu4548 | 筛Sieve分段筛Segmented Sieve欧拉筛法 | 1 |
分解质因数 | Integer factorization | hdu6287 | | 1 |
欧拉定理 | Euler Totient Theorem | hdu1395 | | 1 |
费马小定理 | Fermat’s Theorem | hdu4704 | 逆元 | 1 |
扩展欧几里得算法 | Extended Euclid | hdu1576 | 求ax+by=gcd的解以及逆元 | 1 |
逆元 | Inverse | | 扩展欧几里得、欧拉函数 | 1 |
随机素数测试和大数分解 | | poj 1811 | | 1 |
高斯消元 | Gaussian elimination | hdu5755 | 浮点数高斯消元求方程组的解 | 3 |
模线性方程组 | | hdu3797 | | 1 |
佩尔方程 | Pell’s equation | hdu 3292 | | 3 |
整数拆分 | Integer Factorization | hdu 4651/4658 | | 1 |
求AB的约数之和对MOD去模 | sum of divisors | poj 1845 | | 1 |
大步小步算法 | Baby-Step Giant-Step | POJ 2417,3243 | | 1 |
斐波那契数列取模 | Periodicity modulo p | hdu1021 | 循环节 | 1 |
原根 | primitive root | HDU4992 | | 1 |
快速数论变换 | NTT | HDU4656卷积取模 | | 3 |
线性丢番图方程 | Linear Diophantine Equations | | | 1 |
模运算 | Modulus Arithmetic | | | 1 |
卢卡斯定理 | Lucas Theorem | hdu5226 | | 1 |
中国剩余定理 | Chinese Remainder Theorem | hdu3430 | | 1 |
威尔逊定理 | Wilson Theorem | hdu5391 | | 1 |
米勒-罗宾随机素性测试 | Miller - Rabin Primality Testing | hdu4910 | | 1 |
完全数 | Perfect Numbers | hdu2683 | | 1 |
哥德巴赫猜想 | Goldbach Conjecture | hdu1397 | | -1 |
连分数 | Continued fraction | hdu4188 | | 3 |
3.1.2概率Probability
知识点 | 英文 | 典型题 | 说明 |
---|
基本概率和条件概率 | Basic Probability and Conditional Probability | hdu1204 | |
随机变量 | Random Variables | hdu1145 | |
概率生成函数 | Probability Generating Functions | | |
期望 | Expectation | hdu5984 | |
概率分布 | Probability Distribution | poj3716 | Binomial, Poisson, Normal,Bernoulli |
3.1.3组合数学Counting
特殊计数Special Numbers [Stirling,Fibonacci,Catalan, Eulerian, Harmonic, Bernoulli]
知识点 | 英文 | 典型题 | 说明 |
---|
容斥原理鸽巢原理乘法原理 | Inclusion ExclusionPigeonhole principle | hdu2204hdu1205hdu5525 | 1 |
stirling数 | | hdu4372 | 1 |
Catalan数 | | hdu5673 | 1 |
斐波拉契数 | | hdu1316 | 1 |
Polya计数 | Polya Counting | hdu3547 | 2 |
莫比乌斯反演 | MoBius inversion | hdu5382 | 2 |
母函数 | Generating function | hdu2082/2065 | 普通型、指数型3 |
调和级数 | harmonic number | poj1003 | -1 |
幻方 | Magic Square | hdu 3927 | |
N皇后 | | hdu2553 | |
3.1.4线性代数Linear Algebra
知识点 | 英文 | 典型题 | 说明 |
---|
矩阵的加减 | Addition And Subtraction Of Matrices | hdu3521 | |
矩阵变换 | Matrix Transformations | hdu5671 | |
矩阵的行列式、秩和逆 | Determinant , Rank and Inverse Of Matrix | hdu5852 | |
线性方程组的求解 | Solving System Of Linear Algeraic Equations | | |
矩阵求幂 | Matrix Exponentiation | hdu1757 | |
特征值和特征向量 | Eigenvalues And Eigen vector | | |
多项式的根 | Roots of a polynomial | hdu1296 | |
拉格朗日插值 | Lagrange Interpolation | hdu6253 | |
线性基 | | hdu3949 | |
3.1.5组合游戏(博弈论)Game Theory
知识点 | 英文 | 典型题 | 说明 |
---|
尼姆游戏 | Nim game | hdu2176 | |
P-position、N-position | | | |
图游戏与SG函数 | sprague-Grundy 函数 | hdu3023 | |
Hackenbush游戏 | | hdu3197 | |
威佐夫游戏 | Wythoff’s game | hdu2177 | |
3.1.6群论Group Theory
知识点 | 英文 | 典型题 | 说明 |
---|
伯恩赛德引理 | Burnside’s lemma | hdu4633 | |
波利亚定理 | Polya’s Theorem | hdu3547 | |
拉格朗日定理 | | | |
3.1.7 高精度
知识点 | 英文 | 典型题 | 说明 |
---|
大数加减乘除 | | Hdu1042 HDU 1134 求卡特兰数 | |
大数取模 | | | |
高精度阶乘 | | | |
高精度幂 | | | |
高精度进制转换 | | | |
FFT高精度乘法 | | | |
java高精度 | | | |
3.1.8 计算方法
知识点 | 英文 | 典型题 | 说明 |
---|
快速傅立叶变换 | FFT | hdu 4609 | |
迭代法 | | hdu3809 | |
三分法 | | hdu2899 | |
定积分计算 | | hdu1071 | |
自适应simpson积分 | | hdu 1724 | |
3.2. 数据结构Data Structures
知识点 | 英文 | 典型题 | 说明 |
---|
数组 | Arrays | | |
链表 | Linked List | | |
栈 | Stacks | Hdu1237 | 手动栈 |
队列 | Queues | | |
优先队列、双端队列 | | Hdu1896 | |
第k大元素 | | Hdu4006 | |
块状链表 | | Hdu5193 | |
堆 | Heap | Hdu1280 | |
哈希表、哈希数组 | Hash Tables | Hdu1880 | |
逆序对 | | Hdu4911 | |
跳跃表 | Skip List | Hdu5266 | |
并查集 | Disjoint-Set | Hdu1182 | |
字典树 | Trie | hdu2072 | |
线段树 | Segment Tree | 一维Hdu1540二维Poj1195 | 一维、二维 |
周长并 | | Hdu1828 | |
LCA | | Hdu2586 | |
莫队算法 | | hdu5145 | 解决一类静态,离线区间查询问题 |
树状数组 | Binary Index Tree | Hdu2852N维树状数组Hdu3584 | |
树 | Trees | | |
二叉树 | Binary Tree | hdu5444 | |
平衡二叉树 | balanced binary tree | poj 2828 | |
二叉排序树 | | Hdu3791 | |
二叉搜索树 | Binary Search Tree | Hdu3791 | |
Treap树 | | Hdu4099Poj 2985 | 静态建树、动态建树 |
伸展树 | splay tree | HDU1890、3726、4453poj 2892 | |
笛卡尔树 | | Hdu4095 | |
划分树 | | hdu44717 | 查询区间第 k 大 |
表达式树 | | hdu1805 | |
RMQ | Range Minimum/Maximum Query | Hdu3183 | 一维RMQ、二维RMQ |
树链剖分 | | hdu3966 | 点权、边权 |
动态树 | LCT(link-cut-tree) | hdu5002 | |
左偏堆 | | Hdu1512 | |
可并堆 | | Hdu1512 | |
主席树 | | ZOJ 2112 | 查询区间多少个不同的数、静态区间第 k 大POJ2104、树上路径点权第 k 大、动态第 k 大 |
KD 树 | K-demension tree | HDU4347 | K 近邻,模板题,求出最近的 K 个点 |
替罪羊树 | ScapeGoat Tree | poj1442 | |
动态 KD 树 | | hdu5992 | 结合了 KD 树和替罪羊树 |
树套树 | | hdu5412 | |
3.3. 搜索Searching与排序
3.3.1搜索
知识点 | 英文 | 典型题 | 说明 |
---|
子集生成 | | hdu1584 | |
线性搜索 | Linear Search | | |
折半检索 | Binary Search | | |
三分搜索 | Ternary Search | hdu2899 | |
BFS | | | |
双向广搜 | | Hdu1401 | |
广搜的状态优化 | | Hdu5025 | |
A*算法 | | hdu1043 | |
DFS | | | |
回溯、剪枝 | | Hdu1010 | |
深搜的优化 | | Hdu2084 | |
记忆化搜索 | | Hdu2602 | |
IDA*算法 | | hdu4127 | |
位运算 | | Hdu3711 | |
按位压缩存储状态 | | Hdu5025 | |
极大极小 | | hdu3683 | |
利用M进制数存储状态 | | Hdu4267 | |
舞蹈链 | Dancing Links | Poj2676 | |
3.3.2. 排序Sorting
知识点 | 英文 | 典型题 | 说明 |
---|
选择排序 | Selection Sort | | |
冒泡排序 | Bubble Sort | | |
插入排序 | Insertion Sort | | |
归并排序 | Merge Sort | | |
快速排序 | Quick Sort | | |
| Quick Select | | 脱胎于快排 |
堆排序 | Heap Sort | hdu1280 | |
计数排序 | Counting Sort | hdu1425 | |
基数排序 | Radix Sort | Hdu1280 | |
桶排序 | | Uva340 | |
3.4.贪心 Greedy
知识点 | 英文 | 典型题 | 说明 |
---|
常见问题 | | | |
哈夫曼树 | | Hdu2527 | |
模拟退火算法 | | hdu3007 | 结合概率 |
prim算法 | | hdu1102 | |
kruskal算法 | | hdu1863 | |
Dijkstra算法 | | hdu2066 | |
3.5. 分治Divide & Conquer
知识点 | 英文 | 典型题 | 说明 |
---|
最近点对 | Closest Pair Points | hdu1007 | |
归并排序 | Merge Sort | | |
快速排序 | Quick Sort | | |
CDQ分治 | | hdu4456、4742 | 二维偏序问题三维偏序问题 |
3.6. 动态规划
3.6.1 经典问题Dynamic Programming Classical Problems
知识点 | 英文 | 典型题 | 说明 |
---|
编辑距离 | Edit Distance | hdu4323 | |
扔鸡蛋问题 | Egg Dropping Puzzle | poj3783 | |
整数背包 | Integer Knapsack | Hdu2602 | |
最大独立集 | Largest Independent Set | hdu2458 | |
最长公共子序列 | Longest Common Subsequence | hdu1243 | |
最长公共递增子序列 | | Hdu1423 | |
最长公共子串 | Longest Common Substring | hdu1238 | |
最长上升子序列 | Longest Increasing Subsequence | hdu1257 | |
最长回文子序列 | Longest Palindromic Subsequence | hdu4745 | |
最长回文子串 | Longest Palindromic Substring | hdu3294 | |
最长不重复子字符串 | Longest Substring Without Repeating Character | hdu2668 | |
矩阵链乘 | Matrix Chain Multiplication | hdu4686 | |
最大正方形子矩阵 | Max Size Square Submatrix | hdu4846 | |
最长链对 | Maximum Length Chain Pairs | | |
最大递增子序列和 | Maximum Sum Increasing Subsequence | hdu1087 | |
最优二叉搜索树 | Optimal Binary Search Tree | hdu3791 | |
回文分割 | Palindrome Partition Problem | hdu3613 | |
| Set Partition Problem | | |
| Subset Sum | | |
| Word Wrap Problem | | |
最大两段子段和 | | Hdu2845 | |
最大M子段和 | | Hdu1024 | |
最长有序子序列 | | Hdu1160 | |
3.6.2 高级DP 技术Dynamic Programming Advanced Techniques
知识点 | 英文 | 典型题 | 说明 |
---|
数位dp | | Hdu2089 | |
插头dp | | Ural1519、hdu4285 | |
树型dp | | Hdu1520 | |
区间dp | | Hdu4293 | |
平行四边形优化 | | Poj1160 | |
状压DP | | hdu6321 | |
概率DP | | hdu3276 | |
斯坦那树 | | hdu4085 | |
3.7. 字符串 string algorithm
知识点 | 英文 | 典型题 | 说明 |
---|
kmp | | Poj3167、3690 | |
扩展kmp | | Hdu4763 | |
后缀数组 | Suffix array | Hdu1403、5769 | |
后缀树 | Suffix tree | hdu3518 | |
AC自动机 | Aho-Corasick | hdu2222、4787 | |
后缀自动机 | | hdu5558 | |
回文串 | | Hdu4632 | Manacher |
确定有穷自动机 | DFA | Hdu3065 | |
字符串hash | | hdu4622 | |
3.8. 图论Graphs
3.8.1 图的存储Graph Representation
知识点 | 英文 | 典型题 | 说明 |
---|
邻接矩阵 | Adjacency Matrix | | |
关联矩阵 | Incidence Matrix | | |
邻接表 | Adjacency List | | |
链式前向星 | | | |
3.8.2 图的类型Graph Types
知识点 | 英文 | 典型题 | 说明 |
---|
有向 | Directed | | |
无向 | Undirected | | |
有权 | Weighted | | |
无权 | Unweighted | | |
有向无环图 | Directed Acyclic Graph(DAG) | | |
哈密顿图 | Hamilton | hdu5424 | |
欧拉图 | Euler | hdu5883 | |
3.8.3 基于DFS的图算法 DFS & It’s Application
知识点 | 英文 | 典型题 | 说明 |
---|
判圈 | Cycle Detection | | |
割点割边 | Articulation Points | | |
桥 | Bridges | hdu4738 | |
边双连通分量 | Biconnectivity in Graph | hdu4612 | |
点双连通分量 | | hdu3394 | |
强连通分量 | Strongly Connected Component | | |
有向图的强连通分量 | Tarjan算法Kosaraju算法 | hdu5934hdu1296 | |
拓扑排序 | Topological Sorting | hdu2647 | |
二分图判定 | Bipartite Checking | hdu4751 | |
2-SAT | | hdu4115 | |
3.8.4基于BFS的图算法BFS & It’s Application
知识点 | 英文 | 典型题 | 说明 |
---|
最短路径 | Shortest Path (No. Of Edges) | | 无权图 |
二分图判定 | Bipartite Checking | | |
连通分量 | Connected Components | | |
3.8.5最小生成树Minimum Spanning Tree
知识点 | 英文 | 典型题 | 说明 |
---|
Prim’s Algorithm | | | |
Kruskal Algorithm | | | |
次小生成树 | | hdu4081 | |
曼哈顿最小生成树 | | poj3241 | |
3.8.6单源最短路算法Single Source Shortest-Path
知识点 | 英文 | 典型题 | 说明 |
---|
Dijkstra(堆优化) | | hdu2860 | |
Bellman Ford | | hdu1317 | |
SPFA | | hdu2112 | |
差分约束系统 | | hdu1531 | |
3.8.7多源最短路All pair Shortest Path
知识点 | 英文 | 典型题 | 说明 |
---|
Floyd | Floyd Warshall’s Algorithm | hdu4114 | |
3.8.8欧拉路Euler Tour(有向图、无向图、混合图)
3.8.9最大流Flow
知识点 | 英文 | 典型题 | 说明 |
---|
Ford-Fulkerson | | hdu3549 | |
Edmonds-Karp | | hdu1532 | |
最小费用最大流 | Min Cost - Max Flow | hdu3488 | SPFA 版费用流 |
最小割 | Stoer Wagner Min-Cut | poj2914 | |
ISAP | | hdu3549 | |
dinic | Dinic’s Algorithm | hdu4975 | |
3.8.10 其他问题
知识点 | 英文 | 典型题 | 说明 |
---|
最小树形图 | | hdu2121 | |
二分图匹配 | | Hdu3729 | 无权图:匈牙利算法带权图:KM算法、Hopcroft-Karp 算法 |
二分图多重匹配 | | hdu3605 | |
最小路径覆盖问题 | | hdu1511 | |
LCA | | hdu2586 | dfs+ST 在线算法、离线 Tarjan 算法、LCA 倍增法 |
树分治 | | 点分治HDU5016点分治HDU4918链分治HDU5039 | |
生成树计数 | | hdu4305 | |
3.9. 计算几何Computational Geometry
知识点 | 英文 | 典型题 | 说明 |
---|
二维基本模板 | | | 点和向量;点积;叉积;点和线的关系;多边形;**三角形**内心、外心、重心、垂心;费马点;面积、周长、体积公式;判点在多边形、多面体内外;三角剖分;梯形剖分;多边形重心、多边形切割;多面体体积;坐标旋转 |
凸包 | | hdu1392 | |
最近点对 | | hdu4631 | |
旋转卡壳 | | hdu2202 | 对踵点 |
半平面交 | | hdu5462 | |
最小圆覆盖 | | hdu3007 | |
三维模板 | | | 三维点和向量、三维点积、三维叉积 |
最小球覆盖 | | poj2069 | |
三维凸包 | | hdu4266 | |
3.10. STL
vector、stack、queue、list、set、map、sort()等。