- 分享
GESP C++八级知识点汇总
- @ 2026-8-14 0:41:18
1. 八级新增知识框架
- 加法原理、乘法原理。
- 排列、组合。
- 杨辉三角与组合数。
- 倍增法。
- 一元一次方程、二元一次方程、基本平面几何面积。
- 最小生成树:Kruskal、Prim。
- 最短路径:Dijkstra、Floyd。
- 较复杂算法的时间/空间复杂度分析。
- 一般算法优化和利用数学知识优化。
2. 加法原理与乘法原理
| 原理 | 适用场景 | 公式直觉 |
|---|---|---|
| 加法原理 | 完成目标有若干互斥类别的方法 | |
| 乘法原理 | 完成目标必须经过若干连续步骤 |
口诀:分类相加,分步相乘。
3. 排列与组合
阶乘
,规定 。
排列数
从 个不同元素中选 个并考虑顺序:
。
组合数
从 个不同元素中选 个,不考虑顺序:
。
必背性质
- 。
- 。
- 。
- 。
区分排列/组合的核心问题:交换选中元素的顺序,会不会产生一种新方案?
4. 杨辉三角
每行首尾为 1,中间每项等于左上与右上之和。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
组合意义:第 行(若从 0 行开始)第 项对应 。
二项式展开:
。
5. 倍增法
核心思想:预处理 级别的信息,使一次“大跳”拆成若干二进制跳跃。
若最大规模为 ,倍增层数通常只需 。
典型问题:
- 快速向上跳 个祖先。
- LCA 最近公共祖先。
- 某些区间/路径上的快速跳转。
树上倍增父节点
表示 的 级祖先,则:
。
预处理常见时间 ,单次按二进制位跳转 。
6. 初中代数必背
一元一次方程
且 :。
二元一次方程组
$\begin{cases}a_1x+b_1y=c_1\\a_2x+b_2y=c_2\end{cases}$
常用方法:代入消元、加减消元。
7. 平面几何面积
| 图形 | 面积公式 |
|---|---|
| 长方形 | |
| 正方形 | |
| 三角形 | |
| 平行四边形 | |
| 梯形 | |
| 圆 |
【辅助补充】坐标平面三点面积可用叉积理解:
。
8. 最小生成树 MST
定义
对连通无向带权图,选择 条边连接全部顶点且无环,使总边权最小。
树的关键性质: 个顶点的树有 条边。
9. Kruskal
思想:按边权从小到大枚举,若加入该边不会形成环,就选它。
通常配合并查集判断两个端点是否已连通。
步骤:
- 所有边按权值升序排序。
- 初始化并查集。
- 依次看边
(u,v,w):若find(u)!=find(v),合并并加入答案。 - 选满 条边结束。
复杂度主要来自排序:常见 。
10. Prim
思想:从一个点集开始,每次选择连接“已选集合”和“未选集合”的最小边。
| 实现 | 常见时间复杂度 |
|---|---|
| 邻接矩阵朴素 Prim | |
| 邻接表 + 优先队列 | 常见写作 量级 |
Kruskal 更偏“选边”;Prim 更偏“扩点”。
11. Dijkstra 单源最短路
适用:边权非负的单源最短路。
松弛:若经过 u 到 v 更短,则:
。
优先队列版本骨架:
priority_queue<pair<long long,int>,
vector<pair<long long,int>>,
greater<pair<long long,int>>> pq;
dist[s] = 0;
pq.push({0, s});
while (!pq.empty()) {
auto [d, u] = pq.top(); pq.pop();
if (d != dist[u]) continue;
for (auto [v, w] : g[u]) {
if (dist[v] > d + w) {
dist[v] = d + w;
pq.push({dist[v], v});
}
}
}
常见复杂度: 或简写 (连通/边数关系下)。
Dijkstra 不能直接用于含负边的普通最短路问题。
12. Floyd 全源最短路
状态:d[i][j] 表示当前允许某些中间点后,i 到 j 的最短距离。
核心转移:
。
循环顺序:k 必须在最外层。
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
时间 ,空间 。
13. MST 与最短路区别
| 问题 | 目标 |
|---|---|
| 最小生成树 | 用最小总成本把所有点连起来 |
| 最短路径 | 求某两个点/某源到各点的最短路程 |
MST 中树上两点路径不一定是原图的最短路径。
14. 复杂度总表
好的,按照您的要求,去掉所有公式外的反引号 ,只保留 ` 内联数学环境。修改后的表格如下(同时修正了“最小公倍数”一行的显示问题,但该行不在此表格中,当前表格只处理原有的公式):
| 算法/结构 | 时间复杂度(典型) | 空间复杂度(典型) |
|---|---|---|
| 顺序扫描 | ||
| 二分查找 | ||
| 冒泡/插入/选择 | ||
| 归并排序 | ||
| 快速排序 | 平均 ,最坏 | 递归栈与实现相关 |
| 链表查找 | — | |
| DFS/BFS 邻接表 | 量级 | |
| LCS | ,滚动可降 | |
| 0/1 背包 | 可 | |
| Kruskal | 量级 | |
| Prim 朴素 | 与存储方式相关 | |
| Dijkstra + 堆 | ||
| Floyd | ||
| 倍增预处理 | ||
| 倍增单次查询 | — | |
15. 算法优化常见方向
| 优化方向 | 典型变化 |
|---|---|
| 去掉重复计算 | 递归 → 记忆化/DP |
| 利用单调性 | 线性枚举 → 二分 |
| 预处理 | 多次查询前先算表 |
| 换数据结构 | 线性查找 → 哈希/树结构 |
| 换图存储 | 稠密矩阵 ↔ 稀疏邻接表 |
| 空间压缩 | 二维 DP → 滚动数组 |
| 数学化简 | 循环求和 → 公式 |
| 分治/倍增 | 逐步处理 → 按倍数跳跃 |
等差数列
首项 、末项 、项数 :
若公差 :
等比数列【辅助补充】
公比 :
16. 八级必背易错点
- 分类用加法原理,连续步骤用乘法原理。
- 排列考虑顺序,组合不考虑顺序。
- 。
- 杨辉三角与组合数递推本质相同。
- Kruskal 需要避免成环;并查集是常用实现工具。
- Dijkstra 要求边权非负。
- Floyd 的
k必须放最外层。 - 最小生成树与最短路径不是同一个问题。
- 复杂度必须结合具体实现,不能说“Dijkstra 永远 ”或“Prim 永远某一个复杂度”。
- 算法优化要先找瓶颈,再决定是换算法、换数据结构、预处理还是数学化简。
17. 八级背诵清单
- [ ] 加法/乘法原理。
- [ ] 、、组合数递推与对称性。
- [ ] 杨辉三角。
- [ ] 倍增思想与 预处理、 查询。
- [ ] 基础方程与面积公式。
- [ ] Kruskal / Prim 的思想与复杂度。
- [ ] Dijkstra / Floyd 的适用条件、转移与复杂度。
- [ ] 全阶段复杂度总表和常见优化方向。