算法全景图:300+算法知识体系总览
本文是专栏《算法》的第零篇文章。不深入讲解具体实现,而是带你俯瞰整张算法知识地图------14 大领域、300+ 算法一次看全,帮你建立体系化认知,找到自己的学习路径。
前言
算法不只有排序和二分查找。从经典的图论字符串,到工程中的分布式共识与缓存淘汰;从推荐系统的深度学习模型,到密码学的零知识证明------算法的世界远比你想象的广阔。
本专栏将算法划分为 14 大领域 ,覆盖 300+ 经典与前沿算法 。本文作为专栏的「第 0 篇」,不讲解具体实现细节,而是带你鸟瞰全局:每个领域有哪些算法、解决什么问题、彼此如何关联。读完本文,你将拥有一张清晰的算法学习导航图。
一、算法全景概览
先用一张表看看算法世界的 14 大领域:
| # |
领域 |
算法数量 |
核心关键词 |
典型应用场景 |
| 1 |
经典排序 |
~20 |
快排、归并、TimSort、IntroSort |
数据处理、数据库排序 |
| 2 |
查找与搜索 |
~15 |
二分、BFS/DFS、A*、回溯 |
检索、路径规划、游戏AI |
| 3 |
高级数据结构 |
~35 |
红黑树、B+树、线段树、主席树、LCT |
数据库、区间查询、动态维护 |
| 4 |
图论与网络流 |
~30 |
Dijkstra、Tarjan、Dinic、匈牙利算法 |
路由、社交网络、资源分配 |
| 5 |
字符串处理 |
~25 |
KMP、AC自动机、后缀数组、Manacher |
文本搜索、敏感词过滤、生物信息 |
| 6 |
算法设计范式 |
~25 |
DP、分治、贪心、MCTS、博弈论 |
最优化问题、博弈AI |
| 7 |
启发式优化 |
~15 |
模拟退火、遗传算法、蚁群、粒子群 |
NP-hard问题、调度优化 |
| 8 |
推荐与检索 |
~25 |
协同过滤、HNSW、DeepFM、DIN |
推荐系统、搜索引擎 |
| 9 |
机器学习与深度学习 |
~45 |
SVM、XGBoost、Transformer、PPO |
预测、分类、生成、决策 |
| 10 |
大数据与概率 |
~12 |
HyperLogLog、布隆过滤器、Count-Min Sketch |
UV统计、去重、流式计算 |
| 11 |
系统架构与分布式 |
~35 |
一致性哈希、令牌桶、Paxos、Raft、CRDT |
高并发、分布式系统 |
| 12 |
密码学与安全 |
~25 |
RSA、AES、SHA、zk-SNARKs、国密 |
加密通信、数字签名、隐私计算 |
| 13 |
数学与数论 |
~25 |
GCD、素数筛、莫比乌斯反演、博弈论 |
数论计算、组合计数 |
| 14 |
图形学与几何 |
~20 |
光线追踪、凸包、Voronoi、BVH |
渲染、游戏、GIS |
💡 提示:不必一次性掌握所有领域。建议先通读本文建立全局认知,再根据自身需求选择重点领域深入学习。
二、经典排序算法
排序是最基础的数据处理操作,几乎所有程序都会用到。排序算法可分为比较类 (基于元素间比较)和非比较类(利用元素特性直接定位)两大阵营。
| 算法 |
类别 |
简要说明 |
| 冒泡排序 (Bubble Sort) |
比较 |
相邻元素两两比较交换,O(n²),稳定 |
| 鸡尾酒排序 (Cocktail Sort) |
比较 |
双向冒泡,左右交替扫描 |
| 快速排序 (Quick Sort) |
比较 |
分治法选基准分区,平均 O(n log n) |
| 归并排序 (Merge Sort) |
比较 |
分治分割后合并有序子序列,稳定 |
| 堆排序 (Heap Sort) |
比较 |
利用堆结构选择排序,O(n log n) |
| 插入排序 (Insertion Sort) |
比较 |
逐元素插入已排序部分,适合小规模数据 |
| 选择排序 (Selection Sort) |
比较 |
每轮选最小元素放到前部,O(n²) |
| 希尔排序 (Shell Sort) |
比较 |
分组插入,逐步缩小增量 |
| 梳排序 (Comb Sort) |
比较 |
递减间隔改进冒泡排序 |
| 圈排序 (Cycle Sort) |
比较 |
原地排序,每个元素只写一次 |
| 奇偶排序 (Odd-Even Sort) |
比较 |
交替比较奇/偶位置,可并行 |
| 耐心排序 (Patience Sort) |
比较 |
基于纸牌游戏,可求 LIS |
| TimSort |
混合 |
归并+插入混合,Python/Java 默认排序 |
| IntroSort |
混合 |
快排+堆排+插入,C++ std::sort 基础 |
| 块排序 (Block Sort) |
混合 |
归并的块化变体,可原地稳定 |
| 计数排序 (Counting Sort) |
非比较 |
统计频次还原,O(n+k) |
| 桶排序 (Bucket Sort) |
非比较 |
分桶后各自排序,适合均匀分布 |
| 基数排序 (Radix Sort) |
非比较 |
按位多轮计数排序 |
| 鸽巢排序 (Pigeonhole Sort) |
非比较 |
值域与元素数相近时直接入巢 |
| 快速选择 (Quickselect) |
选择 |
平均 O(n) 查找第 K 大/小元素 |
| BFPRT 算法 |
选择 |
中位数的中位数,最坏 O(n) 选择 |
| 多路归并排序 (K-way Merge) |
外部 |
海量磁盘数据外部排序 |
| 双调排序 (Bitonic Sort) |
并行 |
适合 GPU 的排序网络算法 |
三、查找与搜索算法
查找解决「在哪里」的问题,搜索解决「怎么找路径」的问题。从简单的线性查找到游戏中的 A* 寻路,搜索算法是 AI 与路径规划的基础。
| 算法 |
简要说明 |
| 线性查找 (Linear Search) |
逐元素遍历比较,O(n) |
| 二分查找 (Binary Search) |
有序数组折半查找,O(log n) |
| 三分查找 (Ternary Search) |
三分区间求单峰函数极值 |
| 插值查找 (Interpolation Search) |
自适应确定查找位置,适合均匀分布 |
| 斐波那契查找 (Fibonacci Search) |
斐波那契数列分割区间 |
| 指数查找 (Exponential Search) |
指数扩大范围再二分,适合无界序列 |
| 哈希查找 (Hash Search) |
哈希表直接定位,平均 O(1) |
| 块查找 (Block Search) |
分块索引 + 块内顺序查找 |
| 深度优先搜索 (DFS) |
递归深入到底再回溯 |
| 广度优先搜索 (BFS) |
队列逐层扩展,可求无权最短路径 |
| 双向 BFS (Bidirectional BFS) |
起点终点同时 BFS,相遇终止 |
| 迭代加深 DFS (IDDFS) |
限制深度递增的 DFS |
| A* 寻路算法 (A-Star) |
启发式搜索 f(n)=g(n)+h(n),游戏寻路 |
| IDA* 算法 |
迭代加深版 A*,节省内存 |
| D* 算法 (D-Star) |
动态环境增量式路径规划,机器人导航 |
| Jump Point Search (JPS) |
A* 的网格寻路优化,跳过对称路径 |
| 回溯算法 (Backtracking) |
DFS + 剪枝,系统性探索所有解 |
四、高级数据结构与树算法
数据结构是算法的载体。选对数据结构,算法效率可以差几个数量级。本领域涵盖从基础树结构到竞赛级高级数据结构。
4.1 二叉搜索树与平衡树
| 算法/结构 |
简要说明 |
| 二叉搜索树 (BST) |
左 < 根 < 右,平均查找 O(log n) |
| AVL 树 |
严格平衡,高度差不超过 1 |
| 红黑树 (Red-Black Tree) |
近似平衡,Java TreeMap / C++ map 底层 |
| Treap |
树+堆结合,随机优先级保持平衡 |
| Splay 树 (伸展树) |
访问后旋转至根,自适应访问模式 |
| SBT (Size Balanced Tree) |
以子树大小为平衡条件 |
| 替罪羊树 (Scapegoat Tree) |
不平衡时直接重建子树 |
| 笛卡尔树 (Cartesian Tree) |
堆+搜索树,可线性构造解决 RMQ |
4.2 多路查找树
| 算法/结构 |
简要说明 |
| B 树 / B+ 树 |
多路平衡查找树,数据库索引核心 |
| B* 树 |
B 树变体,节点更满,空间利用率更高 |
| 跳表 (SkipList) |
多层链表概率平衡,Redis 有序集合底层 |
| LSM 树 |
写优化存储结构,LevelDB/RocksDB/HBase 核心 |
4.3 堆与优先队列
| 算法/结构 |
简要说明 |
| 二叉堆 (Binary Heap) |
完全二叉树,Top-K 经典结构 |
| 斐波那契堆 (Fibonacci Heap) |
摊还插入 O(1),Dijkstra 理论最优 |
| 配对堆 (Pairing Heap) |
实际性能优秀的可合并堆 |
| 左偏树 (Leftist Heap) |
可并堆,支持高效合并 |
| 二项堆 (Binomial Heap) |
二项树组成的可合并堆 |
| d 叉堆 (D-ary Heap) |
d 叉完全树,Dijkstra 中减少比较 |
4.4 区间查询与动态维护
| 算法/结构 |
简要说明 |
| 线段树 (Segment Tree) |
区间查询/修改,O(log n) |
| 树状数组 / BIT |
前缀和动态维护,常数更小 |
| ST 表 (Sparse Table) |
倍增静态 RMQ,O(1) 查询 |
| 莫队算法 (Mo's Algorithm) |
离线区间查询,调整询问顺序优化 |
| 树链剖分 (HLD) |
树链映射到线性区间,树上路径/子树操作 |
| 李超线段树 (Li Chao Tree) |
维护线段/函数最值 |
| ZKW 线段树 |
非递归线段树,常数极小 |
| 主席树 (Persistent Segment Tree) |
可持久化线段树,保留历史版本 |
| 分块算法 (Sqrt Decomposition) |
序列分 √n 块,平衡修改与查询 |
| 块状数组 / 块状链表 |
分块思想支持插入与区间操作 |
4.5 集合与连通性
| 算法/结构 |
简要说明 |
| 并查集 (Union-Find) |
路径压缩+按秩合并,近 O(1) 连通性判定 |
| 带权/种类并查集 |
维护节点间关系权值与种类 |
| 差分数组 |
O(1) 区间修改,O(n) 还原 |
| 单调栈 (Monotonic Stack) |
求下一更大/更小元素,O(n) |
| 单调队列 (Monotonic Queue) |
滑动窗口最值,DP 优化利器 |
4.6 动态树与高级结构
| 算法/结构 |
简要说明 |
| Link-Cut Tree (LCT) |
动态维护森林链操作,支持动态连边/断边 |
| 哈希表 (Hash Table) |
哈希函数+冲突处理,平均 O(1) 查找 |
五、图论与网络流算法
图论算法处理网状关系数据,应用覆盖社交网络、路由规划、资源分配等场景。从最短路径到网络最大流,图论是算法竞赛和工程实践的重镇。
5.1 遍历与拓扑
| 算法 |
简要说明 |
| DFS / BFS |
基础图遍历 |
| 拓扑排序 (Topological Sort) |
DAG 排序,Kahn 入度法或 DFS 染色法 |
| 欧拉图判定与构造 |
判定奇度点数量决定欧拉回路/路径存在性 |
5.2 最短路径
| 算法 |
简要说明 |
| Dijkstra 算法 |
单源最短路径,非负权图,O((V+E) log V) |
| Bellman-Ford 算法 |
支持负权边,可检测负权环,O(VE) |
| SPFA 算法 |
Bellman-Ford 队列优化版 |
| Floyd-Warshall 算法 |
全源最短路径,动态规划,O(V³) |
| Johnson 算法 |
全源最短路径,适合稀疏图 |
| 差分约束系统 |
不等式约束转化为最短路径问题 |
| 次短路 / 第 K 短路 |
A*/可持久化堆求第 K 短路径 |
5.3 最小生成树 (MST)
| 算法 |
简要说明 |
| Kruskal 算法 |
边权排序 + 并查集,适合稀疏图 |
| Prim 算法 |
点集扩展贪心选最小边,适合稠密图 |
| Borůvka 算法 |
多轮同时选最小边,适合并行 |
| 朱刘算法 (Edmonds) |
有向图最小树形图,缩环递归 |
| 矩阵树定理 |
基尔霍夫矩阵行列式对生成树计数 |
5.4 连通性与环
| 算法 |
简要说明 |
| Tarjan 算法 |
一次 DFS 求 SCC、割点、桥、LCA |
| Kosaraju 算法 |
两次 DFS 求强连通分量 |
| 圆方树 (Block Forest) |
点双连通分量建树,处理割点/路径 |
| 虚树 (Virtual Tree) |
关键点压缩树,优化树上 DP |
| Fleury 算法 |
欧拉回路朴素构造 |
| Hierholzer 算法 |
欧拉回路高效构造,DFS 回溯入栈 |
| 2-SAT 算法 |
Tarjan SCC 求解布尔可满足性 |
| 支配树 (Dominator Tree) |
求必经节点,用于编译优化 |
| Stoer-Wagner 算法 |
无向图全局最小割,O(V³) |
5.5 网络最大流
| 算法 |
简要说明 |
| Ford-Fulkerson 算法 |
增广路法求最大流 |
| Edmonds-Karp 算法 |
BFS 实现的 Ford-Fulkerson,O(VE²) |
| Dinic 算法 |
分层图 + 多路增广,O(V²E) |
| ISAP 算法 |
Dinic 改进版,无需重新分层 |
| HLPP 算法 |
最高标号预流推进,理论更优 |
| 最小费用最大流 (MCMF) |
费用图上增广,求最小费用最大流 |
5.6 图匹配
| 算法 |
简要说明 |
| 匈牙利算法 |
增广路法求二分图最大匹配,O(VE) |
| Hopcroft-Karp 算法 |
多路增广二分图匹配,O(E√V) |
| KM 算法 (Kuhn-Munkres) |
带权二分图最优匹配,O(V³) |
| 带花树算法 (Blossom) |
一般图最大匹配,处理奇环开花 |
| 最小路径覆盖 |
拆点转二分图匹配求 DAG 最少路径 |
六、字符串与文本处理算法
字符串算法是文本搜索、敏感词过滤、基因序列分析的基础。从经典的 KMP 到后缀自动机,字符串算法的理论深度往往超出预期。
6.1 单模式匹配
| 算法 |
简要说明 |
| KMP 算法 |
next 数组避免回溯,O(n+m) |
| 扩展 KMP (ExKMP / Z 算法) |
求各后缀与主串的最长公共前缀 |
| Boyer-Moore 算法 (BM) |
从后向前 + 坏字符/好后缀跳过 |
| Sunday 算法 |
BM 变体,关注匹配段后一字符 |
| Rabin-Karp 算法 |
滚动哈希匹配,适合多模式 |
| 字符串哈希 (String Hash) |
多项式滚动哈希,O(1) 比较子串 |
6.2 多模式匹配与自动机
| 算法/结构 |
简要说明 |
| Trie 字典树 |
多叉树存储前缀,支持自动补全 |
| AC 自动机 (Aho-Corasick) |
Trie + KMP 失配指针,多模式匹配 |
| 后缀数组 (Suffix Array) |
排序所有后缀,配合 LCP 解决子串问题 |
| 后缀自动机 (SAM) |
最小 DFA 接受所有后缀,线性构造 |
| 广义后缀自动机 |
多串共建 SAM |
| 后缀树 (Suffix Tree) |
压缩 Trie 表示所有后缀 |
| 序列自动机 |
接受所有子序列的最小 DFA |
| 有限状态自动机 (DFA/NFA) |
正则表达式引擎理论基础 |
6.3 回文与子串
| 算法 |
简要说明 |
| Manacher 算法 |
线性时间求最长回文子串 |
| 回文树 (Palindromic Tree) |
存储所有不同回文子串,支持计数 |
6.4 字符串变换与分析
| 算法 |
简要说明 |
| 最小表示法 |
求循环同构的最小字典序表示 |
| Lyndon 分解 |
划分为字典序非递增的 Lyndon 串 |
| Z 函数 |
求各位置后缀与原串的最长公共前缀 |
6.5 距离与序列对齐
| 算法 |
简要说明 |
| Levenshtein 距离 (编辑距离) |
插入/删除/替换最小代价,拼写检查 |
| Needleman-Wunsch 算法 |
全局序列对齐,基因序列对比 |
| Smith-Waterman 算法 |
局部序列对齐 |
| 最长公共子串 (LCS-Substring) |
DP 求最长连续公共子串 |
| Damerau-Levenshtein 距离 |
编辑距离加入相邻交换操作 |
6.6 数据压缩
| 算法 |
简要说明 |
| 游程编码 (RLE) |
连续重复以"字符+次数"编码 |
| Huffman 编码 |
贪心构建最优前缀编码树 |
| LZ77 / LZ78 |
滑动窗口字典压缩,gzip 基础 |
| LZW 算法 |
LZ78 改进,GIF 压缩算法 |
| Deflate 算法 |
LZ77 + Huffman,ZIP/GZIP 核心 |
| Brotli 算法 |
现代 Web 压缩,优于 gzip |
| 算术编码 |
浮点数表示整条消息,接近熵极限 |
| PPM |
上下文建模统计压缩 |
6.7 相似度与去重
| 算法 |
简要说明 |
| SimHash 算法 |
局部敏感哈希,海量网页去重 |
| MinHash |
集合 Jaccard 相似度近似计算 |
| Jaccard 相似系数 |
交集/并集衡量集合相似度 |
| 感知哈希 (pHash) |
图片/音频相似度比较,以图搜图 |
| 余弦相似度 |
文本向量相似度计算 |
七、算法设计范式与技巧
设计范式是算法的「思想方法论」。掌握动态规划、分治、贪心等范式,就掌握了解决新问题的思维武器。
7.1 动态规划 (DP)
| 算法/模型 |
简要说明 |
| 0-1 背包 / 完全背包 / 多重背包 |
经典物品选择优化 |
| 最长公共子序列 (LCS) |
两序列最长公共子序列,O(mn) |
| 最长上升子序列 (LIS) |
二分优化至 O(n log n) |
| 区间 DP |
按区间长度递推,如石子合并 |
| 状态压缩 DP |
二进制表示集合状态,如 TSP |
| 数位 DP |
按数字位递推,统计区间满足条件的数 |
| 树形 DP |
树上动态规划,如最大独立集 |
| 概率 DP / 期望 DP |
基于概率/期望的递推 |
| 插头 DP |
逐格转移轮廓线状态,网格连通性 |
| 计数 DP |
方案数/组合数递推计数 |
| 斜率优化 DP |
凸壳/单调队列优化转移 |
| 决策单调性优化 |
决策点单调性 + 分治/二分优化 |
| 矩阵快速幂加速 DP |
转移写成矩阵幂,O(log n) 加速 |
| CDQ 分治 |
时间分治处理三维偏序等离线问题 |
| 整体二分 |
多询问二分答案并行处理 |
7.2 分治与数学变换
| 算法 |
简要说明 |
| 快速傅里叶变换 (FFT) |
O(n log n) 多项式乘法 |
| 快速数论变换 (NTT) |
模意义下 FFT,避免浮点误差 |
| 快速沃尔什变换 (FWT) |
位运算卷积的快速变换 |
| Karatsuba 大数乘法 |
分治降至 O(n^1.585) |
| Strassen 矩阵乘法 |
分治降至 O(n^2.807) |
| 莫队二次离线 / 带修莫队 |
莫队进阶变种,支持修改 |
7.3 贪心算法
| 算法/问题 |
简要说明 |
| 活动安排问题 |
按结束时间排序贪心选择 |
| 区间合并算法 |
按起点排序后合并重叠区间 |
| Huffman 编码树构建 |
每次合并频率最小的两棵树 |
| Dijkstra / Prim / Kruskal |
图论经典贪心算法 |
7.4 回溯与搜索剪枝
| 算法 |
简要说明 |
| 回溯法 (Backtracking) |
DFS 系统枚举所有解 + 剪枝 |
| 分支限界法 (Branch and Bound) |
BFS/优先队列 + 上下界剪枝 |
| Dancing Links (DLX) |
精确覆盖高效回溯,数独求解利器 |
| 启发式搜索剪枝 |
估值函数排序与剪枝加速搜索 |
7.5 博弈与搜索
| 算法 |
简要说明 |
| Minimax (极小化极大) |
博弈树搜索,双方轮流最优化 |
| Alpha-Beta 剪枝 |
Minimax 剪枝优化 |
| 蒙特卡洛树搜索 (MCTS) |
随机模拟 + UCT,AlphaGo 核心 |
| Expectimax |
含随机节点的博弈搜索 |
| 博弈论 (SG 函数 / Nim) |
公平组合博弈判定先手必胜 |
7.6 倍增与 LCA
| 算法 |
简要说明 |
| 倍增算法 (Binary Lifting) |
预处理 2^k 祖先,O(log n) 跳跃 |
| Tarjan LCA 算法 |
离线并查集求最近公共祖先 |
| 重链剖分 LCA |
树链剖分求 LCA,在线查询 |
八、启发式与元启发式优化算法
🆕 补充领域:这是很多算法资料忽略的一整块版图。当问题属于 NP-hard、精确求解不可行时,启发式算法是工程实践中的主力工具。
| 算法 |
类别 |
简要说明 |
| 爬山算法 (Hill Climbing) |
单点 |
贪心向更优邻域移动,易陷局部最优 |
| 模拟退火 (SA) |
单点 |
以概率接受较差解跳出局部最优 |
| 禁忌搜索 (Tabu Search) |
单点 |
记忆机制避免重复,允许穿越次优 |
| 遗传算法 (GA) |
进化 |
选择/交叉/变异模拟自然进化 |
| 差分进化 (DE) |
进化 |
差分变异向量的实数编码进化 |
| 进化策略 (ES) |
进化 |
自适应步长高斯变异 |
| 蚁群算法 (ACO) |
群智能 |
信息素正反馈,适合 TSP 等路径优化 |
| 粒子群算法 (PSO) |
群智能 |
惯性+个体最优+群体最优更新粒子 |
| 人工蜂群算法 (ABC) |
群智能 |
采蜜蜂/观察蜂/侦察蜂分工搜索 |
| 萤火虫算法 |
群智能 |
基于亮度和吸引度的随机搜索 |
| 变邻域搜索 (VNS) |
元启发式 |
系统切换邻域结构突破局部最优 |
| 迭代局部搜索 (ILS) |
元启发式 |
局部搜索 + 扰动重启 |
| 灰狼优化 (GWO) |
群智能 |
模拟灰狼等级与围捕机制 |
| 梯度下降法 |
精确 |
一阶迭代优化,ML 参数寻优基础 |
九、推荐系统与信息检索算法
推荐系统是互联网公司的核心算法链路。从召回、排序到重排,每一步都有大量经典算法。
9.1 召回与协同过滤
| 算法 |
简要说明 |
| UserCF |
找相似用户推荐其喜欢的物品 |
| ItemCF |
找相似物品根据用户历史推荐 |
| SVD (奇异值分解) |
矩阵分解降维提取隐语义特征 |
| FunkSVD |
梯度下降优化矩阵分解 |
| BiasSVD |
FunkSVD + 用户/物品偏置项 |
| SVD++ |
BiasSVD + 隐式反馈 |
| ALS (交替最小二乘法) |
交替求解大规模矩阵分解 |
| NMF (非负矩阵分解) |
分解结果非负,语义可解释 |
| BPR (贝叶斯个性化排序) |
优化 pairwise 排序损失 |
| Swing 算法 |
共同点击用户"秋千"结构计算相似度 |
9.2 向量召回 / 近似最近邻 (ANN)
| 算法 |
简要说明 |
| HNSW |
多层图结构 ANN,工业界主流 |
| IVF-PQ |
倒排索引 + 乘积量化,Faiss 常用 |
| Annoy |
随机投影树,Spotify 开源 |
| LSH (局部敏感哈希) |
相似项哈希到同一桶 |
| ScaNN |
Google 开源,各向异性量化 |
| DiskANN |
面向磁盘的大规模向量索引 |
9.3 排序与点击率预估 (CTR)
| 算法 |
简要说明 |
| LR (逻辑回归) |
浅层 CTR 基线模型 |
| GBDT + LR |
GBDT 特征工程 + LR 分类 |
| FM (因子分解机) |
自动学习特征二阶交叉 |
| FFM |
FM 改进,引入特征域 |
| Wide & Deep |
宽模型(记忆) + 深模型(泛化) |
| DeepFM |
FM 替代 Wide 侧,端到端特征交叉 |
| xDeepFM |
CIN 模块显式学习高阶交互 |
| DCN (Deep & Cross) |
Cross 网络自动构建特征交叉 |
| AutoInt |
自注意力机制学习特征高阶交互 |
| DLRM |
Meta 开源深度推荐框架 |
| YouTube DNN |
召回与排序两阶段深度网络 |
| DIN (深度兴趣网络) |
注意力机制捕获多样化兴趣 |
| DIEN (深度兴趣演化网络) |
DIN + GRU 建模兴趣演化 |
| DSIN (深度会话兴趣网络) |
按会话切分建模兴趣 |
| SASRec |
基于 Self-Attention 的序列推荐 |
| BST |
Transformer 建模用户行为序列 |
9.4 重排与搜索相关性
| 算法 |
简要说明 |
| TF-IDF |
评估词语对文档的重要程度 |
| BM25 算法 |
TF-IDF 概率论改进,ES 默认打分 |
| PageRank |
网页排名,基于链接结构迭代 |
| HITS 算法 |
区分权威页面与枢纽页面 |
| MMR (最大边界相关性) |
兼顾相关性与多样性 |
| DPP (行列式点过程) |
核矩阵行列式优化多样性 |
| LTR (Learning to Rank) |
RankSVM / LambdaMART 排序学习 |
| 倒排索引 |
词项到文档列表的检索核心结构 |
十、机器学习与深度学习算法
机器学习算法是 AI 时代的核心生产力。从传统监督学习到大模型时代的 Transformer 与 RLHF,本领域覆盖最广。
10.1 监督学习 (传统)
| 算法 |
简要说明 |
| 线性回归 |
最小二乘法拟合线性关系 |
| 逻辑回归 |
Sigmoid 分类,二分类基线 |
| 朴素贝叶斯 |
贝叶斯定理 + 特征独立假设 |
| K 近邻 (KNN) |
距离投票分类/回归,懒惰学习 |
| 支持向量机 (SVM) |
最大间隔超平面 + 核函数 |
| 决策树 (ID3/C4.5/CART) |
信息增益/增益率/基尼系数分裂 |
| 感知机 (Perceptron) |
线性二分类,神经网络基础 |
10.2 集成学习
| 算法 |
简要说明 |
| 随机森林 |
Bagging + 随机特征选择 |
| AdaBoost |
序列训练弱分类器提升错分权重 |
| GBDT |
拟合负梯度迭代提升 |
| XGBoost |
GBDT + 正则化 + 二阶导数 + 并行 |
| LightGBM |
直方图 + 叶子优先生长,快且省内存 |
| CatBoost |
类别特征原生支持 |
| Stacking |
多基模型输出作为元模型输入 |
| Blending |
留出集生成元特征,简化版 Stacking |
10.3 无监督学习
| 算法 |
简要说明 |
| K-Means / K-Means++ |
迭代质心聚类 |
| DBSCAN |
基于密度聚类,发现任意形状簇 |
| OPTICS |
DBSCAN 改进,支持多密度聚类 |
| 层次聚类 |
凝聚/分裂式构建聚类树 |
| EM 算法 |
含隐变量最大似然估计,GMM 核心 |
| PCA |
线性降维,最大化方差方向投影 |
| LDA |
有监督降维 |
| t-SNE |
非线性降维,高维可视化首选 |
| UMAP |
比 t-SNE 更快且保留全局结构 |
| 自编码器 |
编码-解码重构的无监督表示学习 |
| 谱聚类 |
拉普拉斯矩阵特征向量图划分聚类 |
10.4 关联规则与异常检测
| 算法 |
简要说明 |
| Apriori 算法 |
频繁项集挖掘 + 关联规则 |
| FP-Growth |
FP 树压缩存储,比 Apriori 高效 |
| Isolation Forest |
随机划分的异常检测 |
| LOF (局部异常因子) |
基于局部密度的离群点检测 |
10.5 神经网络优化算法
| 算法 |
简要说明 |
| SGD |
小批量随机采样梯度下降 |
| Momentum |
累积历史梯度方向加速收敛 |
| NAG (Nesterov) |
超前一步计算梯度的 Momentum |
| AdaGrad |
自适应学习率 |
| RMSProp |
指数加权移动平均梯度平方 |
| AdaDelta |
无需全局学习率的自适应方法 |
| Adam |
Momentum + RMSProp 融合,最常用 |
| AdamW |
Adam + 解耦权重衰减 |
| NAdam |
Adam + Nesterov 动量 |
| 学习率调度 |
Warmup / Cosine Annealing 动态调整 |
10.6 深度学习模型与架构
| 算法/模型 |
简要说明 |
| 多层感知机 (MLP) |
全连接神经网络基础架构 |
| 卷积神经网络 (CNN) |
卷积核提取局部特征,图像识别核心 |
| 经典 CNN |
LeNet / AlexNet / VGG / Inception |
| RNN / LSTM / GRU |
序列建模,处理时序/文本 |
| Transformer |
自注意力机制,取代 RNN |
| Attention 机制 |
加权关注重要部分 |
| ResNet |
跳跃连接解决梯度消失,训练超深网络 |
| BERT |
双向 Transformer 预训练语言模型 |
| GPT 系列 |
自回归生成式预训练,ChatGPT 基础 |
| Vision Transformer (ViT) |
Transformer 应用于图像分类 |
| GAN |
生成器与判别器对抗训练 |
| VAE |
变分推断生成模型 |
| Diffusion Model |
逐步去噪生成,Stable Diffusion 核心 |
| MoE |
稀疏激活混合专家,扩展模型容量 |
| U-Net |
编码-解码 + 跳跃连接,医学分割与扩散骨干 |
10.7 图神经网络
| 算法/模型 |
简要说明 |
| GCN (图卷积网络) |
图上卷积操作,节点特征聚合 |
| GraphSAGE |
采样邻居归纳式学习 |
| GAT (图注意力网络) |
注意力机制加权聚合邻居 |
| GIN (图同构网络) |
与 WL 测试等价的强表达力 GNN |
10.8 序列模型与 NLP
| 算法/模型 |
简要说明 |
| 隐马尔可夫模型 (HMM) |
含隐状态序列模型,语音识别经典 |
| 维特比算法 |
HMM 动态规划解码,求最优状态序列 |
| 前向-后向算法 |
HMM 概率计算与参数学习 |
| CRF (条件随机场) |
序列标注概率图模型,NER 分词 |
| Word2Vec |
CBOW / Skip-gram 词向量预训练 |
| GloVe |
基于全局共现矩阵的词向量 |
| ELMo |
双向 LSTM 上下文词向量 |
| 对比学习 |
拉近正样本、推远负样本的自监督学习 |
10.9 强化学习
| 算法 |
简要说明 |
| Q-Learning |
无模型离策略 TD 学习 |
| SARSA |
在策略 TD 学习 |
| DQN |
Q-Learning + 神经网络 + 经验回放 |
| DDPG |
深度确定性策略梯度,连续动作空间 |
| A3C / A2C |
异步/同步优势演员-评论家 |
| PPO |
限制策略更新幅度,OpenAI 首选 |
| SAC |
最大熵强化学习,兼顾探索与利用 |
| TD3 |
DDPG 改进,双 Q 网络缓解过估计 |
10.10 前沿学习范式
| 算法/范式 |
简要说明 |
| 联邦学习 |
数据不出本地,交换参数保护隐私 |
| 元学习 |
"学会学习",MAML 提升小样本泛化 |
| Prompt Tuning / LoRA |
参数高效微调大模型 |
| RLHF |
人类反馈强化学习对齐大模型 |
| RAG |
检索增强生成,缓解大模型幻觉 |
| Agent / 多智能体 |
LLM 驱动工具调用与协同决策 |
十一、大数据统计与概率算法
🆕 补充视角:大数据场景下,精确计算往往不可行,概率数据结构以极小空间换取近似结果,是工业界处理海量数据的利器。
11.1 基数估计与集合存在性
| 算法 |
简要说明 |
| HyperLogLog (HLL) |
~12KB 估算十亿级 UV 基数 |
| 布隆过滤器 (Bloom Filter) |
位数组+多哈希,集合存在性判定 |
| 布谷鸟过滤器 (Cuckoo Filter) |
支持删除的布隆过滤器替代 |
| Counting Bloom Filter |
计数版布隆过滤器,支持删除 |
11.2 频次统计与 Heavy Hitters
| 算法 |
简要说明 |
| Count-Min Sketch |
多哈希计数矩阵,频次估计 |
| Top-K (Misra-Gries) |
流式数据维护频繁项 |
| SpaceSaving |
高效 Top-K 频繁项追踪 |
| Count Sketch |
中位数估计减少偏差 |
11.3 分位数与摘要
| 算法 |
简要说明 |
| T-Digest |
流式分位数估计,P99 延迟监控 |
| GK 算法 |
流式分位数近似,可控误差界 |
| Q-Digest |
二叉树定量摘要,适合分布式聚合 |
11.4 随机抽样与洗牌
| 算法 |
简要说明 |
| 蓄水池抽样 (Reservoir Sampling) |
流式等概率均匀采样 k 个元素 |
| Fisher-Yates 洗牌 |
原地公平随机打乱数组 |
| 加权蓄水池抽样 |
按权重概率进行流式抽样 |
十二、系统架构、分布式与高并发算法
🆕 工程必备:这是面试高频、工程核心,却很少被纳入「算法」体系的领域。后端工程师必学。
12.1 负载均衡
| 算法 |
简要说明 |
| 轮询 (Round Robin) |
依次分配请求 |
| 加权轮询 |
按服务器性能权重分配 |
| 平滑加权轮询 |
Nginx 默认,避免突发集中 |
| 最小连接数 |
分配给连接数最少的服务器 |
| 源地址哈希 (IP Hash) |
同一 IP 固定分配,会话保持 |
| 一致性哈希 (Consistent Hashing) |
虚拟节点环形哈希,最小化数据迁移 |
| Maglev 一致性哈希 |
Google 查表法,均匀且 O(1) |
| P2C (Power of Two Choices) |
随机选两个取较优者 |
12.2 高并发限流
| 算法 |
简要说明 |
| 令牌桶 (Token Bucket) |
固定速率生成令牌,允许突发 |
| 漏桶 (Leaky Bucket) |
固定速率漏水,平滑流量 |
| 滑动时间窗口 |
精确统计窗口内请求数 |
| 滑动窗口计数器 |
近似滑动窗口,内存更低 |
| 固定窗口计数器 |
最简单限流,存在边界突刺 |
| Guava RateLimiter |
带预热的令牌桶 |
| Sentinel 冷启动 / 匀速排队 |
阿里 Sentinel 多种限流策略 |
12.3 网络传输与拥塞控制
| 算法 |
简要说明 |
| TCP Tahoe / Reno |
经典拥塞控制,慢启动+拥塞避免+快重传 |
| TCP Cubic |
Linux 默认,三次函数窗口增长 |
| Google BBR |
基于带宽和延迟的拥塞控制 |
| QUIC 拥塞控制 |
UDP 之上可靠传输 |
| Nagle 算法 |
合并小包减少网络开销 |
| 慢启动/拥塞避免/快重传快恢复 |
TCP 拥塞控制四大核心机制 |
12.4 缓存置换
| 算法 |
简要说明 |
| LRU |
淘汰最久未访问,HashMap+双向链表 |
| LFU |
淘汰访问频次最低 |
| FIFO |
淘汰最早进入缓存 |
| MRU |
淘汰最近访问,适合扫描型访问 |
| 2Q 算法 |
双队列分离冷热数据 |
| ARC |
自适应调整 LRU 与 LFU 比例 |
| Clock 时钟置换 |
近似 LRU,访问位+循环指针 |
| W-TinyLFU |
Caffeine 使用,Count-Min Sketch+LRU |
| LIRS |
基于 IRS 区分热块与冷块 |
| 缓存策略 |
Cache Aside / Read-Through / Write-Through / Write-Behind |
12.5 分布式 ID 生成
| 算法 |
简要说明 |
| 雪花算法 (Snowflake) |
时间戳+机器ID+序列号,64位唯一ID |
| UUID |
标准化唯一标识符,无需中心协调 |
| Leaf (美团) |
号段+Snowflake 双 buffer |
| Tinyid / UidGenerator |
号段/雪花变体开源方案 |
12.6 分布式共识与同步
| 算法/协议 |
简要说明 |
| Paxos |
分布式一致性基石,多数派投票 |
| Multi-Paxos / Fast Paxos |
Paxos 多实例/快速路径优化 |
| Raft |
Paxos 工程化简化,领导者选举+日志复制 |
| Zab 协议 |
ZooKeeper 原子广播,类 Paxos 主备 |
| Gossip 协议 |
流言传播式最终一致性 |
| 两阶段提交 (2PC) |
预提交+正式提交,阻塞式强一致 |
| 三阶段提交 (3PC) |
2PC + CanCommit + 超时机制 |
| TCC |
补偿型分布式事务 |
| Saga 模式 |
长事务拆分子事务+补偿 |
| Vector Clock |
分布式事件因果关系判定 |
| Lamport 时钟 |
逻辑时钟定义事件先后顺序 |
| CAP / BASE 理论 |
一致性-可用性-分区容忍权衡 |
| CRDT |
无冲突复制数据类型,自动合并 |
| Quorum NWR |
读写法定数保证一致性 |
| 租约 (Lease) 机制 |
带期限授权,主备切换与心跳容错 |
十三、密码学、安全与哈希算法
安全是系统的底线。理解密码学算法原理,才能做出安全的设计决策。
13.1 非对称加密与密钥协商
| 算法 |
简要说明 |
| RSA |
大数分解难题,公钥加密/私钥解密 |
| ECC (椭圆曲线) |
相同安全强度密钥更短 |
| Diffie-Hellman |
不安全信道协商共享密钥 |
| ECDH |
ECC 版本的 DH,更高效 |
| ElGamal |
离散对数的非对称加密与签名 |
| 国密 SM2 |
中国国标椭圆曲线非对称加密 |
13.2 对称加密
| 算法 |
简要说明 |
| AES |
分组对称加密全球标准 |
| DES / 3DES |
传统分组加密,已不推荐 |
| ChaCha20 |
流密码,移动端性能优 |
| RC4 |
流密码,已发现漏洞 |
| 国密 SM4 |
中国国标分组对称加密 |
| AES-GCM / ChaCha20-Poly1305 |
AEAD 认证加密 |
| 分组密码工作模式 |
ECB/CBC/CTR/CFB/OFB |
13.3 哈希与消息认证
| 算法 |
简要说明 |
| SHA-256 / SHA-512 |
安全哈希,数字签名与区块链 |
| SHA-3 (Keccak) |
海绵结构哈希,SHA-2 备选 |
| MD5 |
已不抗碰撞,不推荐安全场景 |
| HMAC |
哈希消息认证码 |
| MurmurHash |
非加密哈希,广泛用于哈希表 |
| CityHash |
Google 开源,短字符串优化 |
| xxHash |
极速非加密哈希 |
| FxHash / FNV |
简单快速非加密哈希 |
| 国密 SM3 |
中国国标密码杂凑,256 位 |
13.4 密码存储与防彩虹表
| 算法 |
简要说明 |
| Bcrypt |
自带盐+可调成本因子 |
| Scrypt |
内存硬函数,抗 GPU/ASIC |
| Argon2 |
PHC 冠军,内存硬+抗侧信道 |
| PBKDF2 |
基于 HMAC 的密钥派生 |
13.5 数字签名与零知识证明
| 算法 |
简要说明 |
| ECDSA |
椭圆曲线数字签名,TLS/区块链 |
| Ed25519 |
高性能 EdDSA,确定性签名 |
| RSA 签名 |
PKI 体系常用 |
| zk-SNARKs |
简洁非交互零知识证明 |
| zk-STARKs |
透明抗量子零知识证明 |
| 国密 SM9 |
基于身份的标识密码 |
| 同态加密 |
密文上直接计算 |
| 秘密共享 |
Shamir 门限方案,n 份 k 份恢复 |
| 安全多方计算 (MPC) |
多方不泄露输入共同计算 |
13.6 后量子密码
🆕 前沿补充:量子计算威胁下,后量子密码已成为 NIST 标准化的热点方向。
| 算法 |
简要说明 |
| 格密码 (Kyber / ML-KEM) |
NIST 后量子密钥封装 |
| Dilithium / ML-DSA |
NIST 后量子数字签名 |
| 基于编码/哈希的签名 |
后量子其他候选方向 |
十四、数学与数论算法
数论算法是密码学、竞赛编程的基础。组合数学则为计数问题提供系统方法。
14.1 基础数论
| 算法 |
简要说明 |
| 欧几里得算法 (GCD) |
求最大公约数,O(log min(a,b)) |
| 扩展欧几里得 (ExGCD) |
求 ax+by=gcd(a,b) 整数解 |
| 快速幂 |
二进制分解指数,O(log n) |
| 矩阵快速幂 |
快速幂推广到方阵,加速递推 |
| 埃拉托斯特尼筛法 |
筛素数,O(n log log n) |
| 欧拉筛 (线性筛) |
严格 O(n) 筛素数 |
| Miller-Rabin 素性测试 |
概率性素数判定 |
| AKS 素性测试 |
确定性多项式时间素数判定 |
| 中国剩余定理 (CRT) |
求解模数互质同余方程组 |
| 卢卡斯定理 (Lucas) |
组合数取模 p 高效计算 |
| 费马小定理 |
模逆元与素性判定基础 |
| 欧拉函数 / 欧拉降幂 |
计算 ≤n 与 n 互素的整数个数 |
| BSGS 算法 (大步小步) |
O(√p) 求解离散对数 |
14.2 积性函数与数论分块
🆕 竞赛进阶:以下算法是算法竞赛数论部分的核心,普通资料很少涉及。
| 算法 |
简要说明 |
| 莫比乌斯反演 |
利用莫比乌斯函数反演数论求和 |
| 杜教筛 |
亚线性时间求积性函数前缀和 |
| Min_25 筛 |
亚线性求积性函数前缀和,适用更广 |
| 狄利克雷卷积 |
数论函数卷积运算,反演理论基础 |
| 整除分块 |
O(√n) 计算 Σ⌊n/i⌋ 求和 |
14.3 线性代数
| 算法 |
简要说明 |
| 高斯消元法 |
解线性方程组,O(n³) |
| 线性基 |
异或空间基底,求最大异或和 |
| 矩阵乘法与快速幂 |
方阵乘法及幂运算加速递推 |
14.4 最优化与近似
| 算法 |
简要说明 |
| 线性规划 / 单纯形法 |
线性约束下最优化求解 |
| 牛顿迭代法 |
求方程根/极值的迭代逼近 |
| 拉格朗日乘数法 |
等式约束下极值求解 |
| 蒙特卡洛算法 |
随机采样近似统计 |
| 拉斯维加斯算法 |
随机化但结果总正确 |
| 素数定理 |
素数分布密度 π(n) ~ n/ln(n) |
14.5 组合数学
| 算法/定理 |
简要说明 |
| Catalan / Stirling 数 |
经典组合计数数列 |
| 容斥原理 |
多集合并集大小反演计算 |
| 康托展开 / 逆康托展开 |
排列与字典序排名双向映射 |
| 生成函数 (母函数) |
幂级数表示数列求解计数 |
| Pólya 计数定理 |
群作用下等价类计数 |
十五、计算机图形学与几何算法
图形学算法支撑着游戏、渲染、GIS 等领域。计算几何则是竞赛与 CAD 的基础。
15.1 光栅化与绘图
| 算法 |
简要说明 |
| Bresenham 划线/画圆 |
整数运算高效绘制,无浮点误差 |
| 中点画圆算法 |
对称性八分画圆 |
| Wu 反走样算法 |
抗锯齿直线绘制 |
| DDA 数值微分划线 |
浮点增量绘制直线 |
| 多边形填充扫描线 |
扫描线与边交点配对填充 |
15.2 渲染与光照
| 算法 |
简要说明 |
| 光线追踪 (Ray Tracing) |
模拟光线传播,真实反射/折射 |
| 路径追踪 (Path Tracing) |
蒙特卡洛积分完整光线传输 |
| 辐射度算法 (Radiosity) |
能量守恒漫反射全局光照 |
| 光子映射 (Photon Mapping) |
两阶段全局光照 |
| Phong / Blinn-Phong |
经典局部光照经验模型 |
| PBR 基于物理的渲染 |
微表面 BRDF 真实感渲染 |
15.3 计算几何
| 算法 |
简要说明 |
| Graham 扫描法 |
极角排序+栈维护求凸包,O(n log n) |
| Jarvis 步进法 |
逐步包裹求凸包,O(nh) |
| Andrew 凸包算法 |
水平排序的凸包算法 |
| 最近点对 |
分治法 O(n log n) 求最近点对 |
| 扫描线算法 (Sweep Line) |
求线段交点/面积并 |
| Fortune 算法 |
扫描线构建 Voronoi 图 |
| Delaunay 三角剖分 |
最大化最小角的三角剖分 |
| 旋转卡壳法 |
凸多边形对踵点遍历,求直径/最远点对 |
| 半平面交 |
线性规划可行域/多边形裁剪 |
| Pick 定理 |
格点多边形面积公式 |
| 自适应辛普森积分 |
自适应精度数值积分 |
| 射线法 / 转角法 |
点在多边形内判定 |
15.4 空间加速结构
| 算法/结构 |
简要说明 |
| KD-Tree |
多维空间二叉分割,最近邻加速 |
| BVH (层次包围盒) |
光线追踪加速结构 |
| Octree (八叉树) |
三维空间八叉分割 |
| QuadTree (四叉树) |
二维空间四叉分割 |
| R-Tree |
矩形索引树,空间数据库核心 |
| Uniform Grid |
简单空间划分,均匀分布碰撞检测 |
总结
本文是专栏的开篇导航,带你俯瞰了算法世界的 14 大领域、300+ 算法。核心要点:
- 算法不止排序和二分------从分布式共识到零知识证明,算法的世界远比想象中广阔
- 体系化认知是关键------先有地图,再上路;知道每个算法属于哪个领域、解决什么问题
- 按需深入学习------根据岗位和目标选择重点领域,不必面面俱到
- 工程与理论并重------既要有竞赛选手的算法功底,也要有工程师的系统视角
📌 如果这篇文章对你有帮助,欢迎 点赞、收藏、关注,支持专栏持续更新!
📖 完整专栏导航请见:算法
文章标签 :算法 数据结构 排序算法 图论 机器学习 分布式 后端开发