C++算法详解大纲
模块一:算法思想基础
目标:建立算法思维框架
- 算法分析基础
- 时间复杂度分析(大O、Θ、Ω表示法)
- 空间复杂度分析
- 算法效率评估方法
- 暴力枚举
- 完全枚举策略
- 排列组合生成
- 子集枚举方法
- 模拟算法
- 过程模拟实现
- 状态模拟方法
模块二:递归与分治
目标:掌握问题分解思想
- 递归设计
- 递归三要素(定义、边界、递推)
- 递归树分析方法
- 尾递归优化
- 经典递归问题
- 汉诺塔问题
- 斐波那契数列
- 全排列问题
- 分治策略
- 分治三步法(分解、解决、合并)
- 典型算法:归并排序、快速排序
- 逆序对统计问题
- 最近点对问题
模块三:排序与离散化
目标:掌握数据预处理技术
- 比较排序
- 冒泡、选择、插入排序(理解思想)
- 希尔排序
- 堆排序及优先队列应用
- 非比较排序
- 计数排序(限制条件与应用)
- 桶排序(数据分布假设)
- 基数排序(多关键字)
- 排序应用
- 第K大/小元素问题
- 区间合并问题
- 离散化技术
- 有序离散化方法
- 保序映射实现
- 应用场景:稀疏数据压缩
模块四:搜索算法
目标:掌握状态空间探索方法
- 基础搜索
- 深度优先搜索(DFS)框架
- 广度优先搜索(BFS)框架
- 回溯算法
- 回溯框架与剪枝
- 排列组合回溯
- 约束满足问题(如数独)
- 搜索优化技术
- 记忆化搜索
- 可行性剪枝与最优性剪枝
- 迭代加深搜索(IDDFS)
- 双向BFS
- 启发式搜索
- A*算法原理
- 估价函数设计原则
- 八数码问题实践
模块五:动态规划
目标:掌握最优化问题解决方法
- DP基础概念
- 最优子结构性质
- 无后效性理解
- 重叠子问题识别
- 线性DP
- 一维DP:最长上升子序列
- 二维DP:最长公共子序列
- 编辑距离问题
- 背包问题
- 0/1背包及空间优化
- 完全背包问题
- 多重背包及二进制优化
- 分组背包问题
- 区间DP
- 区间合并类问题
- 最优二叉搜索树
- 状态机DP
- 股票买卖系列
- 状态转移设计
- 树形DP
- 后序遍历框架
- 树上最大独立集
- 树形背包问题
- 状态压缩DP
- 二进制状态表示
- 旅行商问题(TSP)
- 棋盘覆盖问题
- 数位DP
- 数位统计问题
- 记忆化搜索实现
- DP优化技巧
- 单调队列优化
- 斜率优化(入门)
- 四边形不等式
模块六:贪心算法
目标:掌握局部最优策略
- 贪心原理
- 贪心选择性质
- 最优子结构
- 正确性证明方法
- 经典贪心问题
- 区间调度问题
- 霍夫曼编码
- 最小生成树(Prim、Kruskal)
- 单源最短路径(Dijkstra)
模块七:数据结构应用
目标:掌握数据结构作为算法工具
- 线性结构
- 栈:表达式求值、递归模拟
- 队列:BFS、滑动窗口
- 单调栈/队列应用
- 树形结构
- 堆与优先队列
- 并查集(路径压缩、按秩合并)
- 二叉搜索树基础
- 区间查询结构
- 树状数组(单点更新、前缀查询)
- 线段树(区间更新、懒惰标记)
- ST表(RMQ静态查询)
- 字符串结构
- Trie树(前缀检索)
- 字符串哈希(滚动哈希)
- KMP算法(模式匹配)
- 图结构
- 邻接表与邻接矩阵
- 拓扑排序算法
- 强连通分量(Kosaraju、Tarjan)
模块八:图论算法
目标:掌握图结构问题解决方法
- 最短路径
- Dijkstra算法(非负权)
- Bellman-Ford算法(负权检测)
- Floyd-Warshall算法(多源)
- SPFA算法(改进Bellman-Ford)
- 最小生成树
- Prim算法(稠密图)
- Kruskal算法(稀疏图)
- 网络流基础
- 最大流(Ford-Fulkerson)
- 最小割概念
- 二分图匹配(匈牙利算法)
模块九:数学相关算法
目标:掌握算法中的数学工具
- 数论基础
- 欧几里得算法(最大公约数)
- 扩展欧几里得算法
- 素数筛法(埃氏筛、线性筛)
- 快速幂算法
- 组合数学
- 排列组合计算
- 鸽巢原理应用
- 容斥原理
模块十:高级专题
目标:扩展算法视野
- 字符串高级
- AC自动机(多模式匹配)
- 后缀数组(倍增构造)
- 后缀自动机(SAM)基础
- 计算几何基础
- 点、向量运算
- 凸包算法(Graham扫描)
- 线段相交判断
- 博弈论基础
- SG函数概念
- Nim游戏分析
模块十一:问题建模与综合应用
目标:培养实际问题解决能力
- 问题转化技巧
- 将实际问题转化为图论问题
- 将优化问题转化为DP问题
- 将计数问题转化为组合数学问题
- 算法选择策略
- 根据数据规模选择算法
- 根据问题特征匹配算法模式
- 复杂度与实现难度的权衡
- 调试与优化
- 算法正确性验证方法
- 性能瓶颈分析方法
- 边界条件处理技巧
模块十二:竞赛与实战技巧
目标:准备算法竞赛与实际应用
- 输入输出优化
- 快速读写技巧
- 输入解析方法
- 常见陷阱与易错点
- 整数溢出处理
- 浮点数精度问题
- 递归深度限制
- 测试与对拍
- 随机数据生成
- 暴力算法验证
- 对拍程序编写
附录:学习资源与工具
- 在线判题系统
- 洛谷(中文社区,题目分类细)
- Codeforces(竞赛平台,题目质量高)
- LeetCode(面试准备,企业真题)
- 学习路径建议
- 按模块顺序学习,每个模块掌握核心思想
- 每个知识点至少完成3-5道典型题目
- 定期回顾,建立个人解题模板库