Cheat Sheet速查表
跳转到主要内容

算法与数据结构时空复杂度全景速查表

在计算机系统设计、性能调优与算法工程实践中,准确掌握算法的时空渐进复杂度(Asymptotic Complexity)与边界特性是架构选型的基石。

本速查表涵盖计算机科学 7 大工程分组、160+ 核心算法与数据结构,以高密度表格呈现其最佳时间、平均时间、最坏时间复杂度、辅助空间复杂度及核心特性(所有复杂度均为渐近上界,常数因子未计)。

🔗 相关矩阵速查:进阶高级数据结构与算法技巧速查表 · 加解密与现代密码学算法速查表 · AI 核心算法全景速查表 · Python 速查表


1. 经典与现代排序算法 (Sorting Algorithms)

按比较排序(下界 (\Omega(n \log n)))与非比较线性排序分类:

算法名称 (英文)最佳时间平均时间最坏时间空间复杂度稳定性核心工作机制与工程落地点
冒泡排序 (Bubble Sort)(O(n))(O(n^2))(O(n^2))(O(1))稳定相邻元素两两比较交换,教学基准,工业少用
选择排序 (Selection Sort)(O(n^2))(O(n^2))(O(n^2))(O(1))不稳定每次从未排序区间选择极值,交换次数至多 (n-1)
插入排序 (Insertion Sort)(O(n))(O(n^2))(O(n^2))(O(1))稳定小数组((n < 32))或基本有序数组效率极高
二分插入排序 (Binary Insertion)(O(n))(O(n^2))(O(n^2))(O(1))稳定二分折半查找插入位置,减少比较次数,移动仍为平方阶
希尔排序 (Shell Sort)(O(n \log n))视增量序列(O(n^2) \sim O(n^{1.3}))(O(1))不稳定缩小增量插入排序,Hibbard / Sedgewick 增量可达亚二次方
归并排序 (Merge Sort)(O(n \log n))(O(n \log n))(O(n \log n))(O(n))稳定经典分治法,外排序与链表排序的标准基础
原地归并排序 (In-place Merge)(O(n \log n))(O(n \log n))(O(n \log n))(O(1))稳定借助块交换(Block Sort)消除辅助数组,常数较大
快速排序 (Quick Sort)(O(n \log n))(O(n \log n))(O(n^2))(O(\log n))不稳定原地划分基准点(Pivot),三数取中/随机基准可规避最坏退化
三路快速排序 (3-Way Quick Sort)(O(n))(O(n \log n))(O(n^2))(O(\log n))不稳定划分为小于、等于、大于三段,对海量重复键值极佳
堆排序 (Heap Sort)(O(n \log n))(O(n \log n))(O(n \log n))(O(1))不稳定基于完全二叉堆原地排序,最坏性能有保证但 CPU 缓存局部性差
内省排序 (Introsort)(O(n \log n))(O(n \log n))(O(n \log n))(O(\log n))不稳定C++ std::sort 工业标准:快排 ➔ 递归过深切堆排 ➔ 小区间切插入
蒂姆排序 (TimSort)(O(n))(O(n \log n))(O(n \log n))(O(n))稳定Python list.sort / Java 工业标准:自适应识别天然有序段 (Runs) + 归并
模式击败快排 (pdqsort)(O(n))(O(n \log n))(O(n \log n))(O(\log n))不稳定Rust / Go 现代标准:对预排序、单调反序与重复元素均达到 (O(n))
计数排序 (Counting Sort)(O(n+k))(O(n+k))(O(n+k))(O(k))稳定非比较排序,依赖数据范围 (k),适合密集小整数
桶排序 (Bucket Sort)(O(n+k))(O(n+k))(O(n^2))(O(n+k))稳定数据均匀分布至各桶分别排序,外部大规模排序基础
基数排序 LSD / MSD(O(d(n+k)))(O(d(n+k)))(O(d(n+k)))(O(n+k))稳定按有效位自低向高 (LSD) 或自顶向下 (MSD) 配合计数排序
鸽巢排序 (Pigeonhole Sort)(O(n+k))(O(n+k))(O(n+k))(O(k))稳定键范围有限时一对一放置,计数排序的紧凑变体
鸡尾酒排序 (Cocktail Sort)(O(n))(O(n^2))(O(n^2))(O(1))稳定双向定向冒泡,能更快将序列末端的“乌龟”元素推向前端
梳排序 (Comb Sort)(O(n \log n))(O(n^2 / 2^p))(O(n^2))(O(1))不稳定冒泡变体,引入递减步长跨度因子(1.3),消除末端滞后
侏儒排序 (Gnome Sort)(O(n))(O(n^2))(O(n^2))(O(1))稳定代码极短,类似只包含单循环的插入排序回退
圈排序 (Cycle Sort)(O(n^2))(O(n^2))(O(n^2))(O(1))不稳定写入次数理论最少(每个元素至多写内存 2 次),适合 EEPROM/闪存
煎饼排序 (Pancake Sorting)(O(n))(O(n))(O(n)) 翻转(O(1))不稳定仅允许前缀翻转(Prefix Reversal)操作,数学前沿问题
多路外部归并 (K-Way External)(O(n \log k))(O(n \log k))(O(n \log k))(O(k)) 内存稳定海量数据超出内存时磁盘分块排序,败者树加速归并

2. 查找与选择算法 (Search & Selection)

算法名称 (英文)前提条件平均时间最坏时间空间复杂度核心特性与适用边界
顺序查找 (Linear Search)无要求(O(n))(O(n))(O(1))任意序列,硬件缓存友好,小样本首选
二分查找 (Binary Search)必须单调有序(O(\log n))(O(\log n))(O(1))经典折半,对数时间复杂度,注意中点溢出防范
插值查找 (Interpolation Search)均匀单调分布(O(\log \log n))(O(n))(O(1))自适应估算步长比例,数据极度不均匀时退化为线性
指数查找 (Exponential Search)单调有序,未知边界(O(\log i))(O(\log i))(O(1))先按 (2^k) 探测范围再二分,适合无限数据流或超大稀疏数组
斐波那契查找 (Fibonacci Search)单调有序(O(\log n))(O(\log n))(O(1))黄金分割比例切分,全过程仅用加减法,无乘除开销
跳表查找 (Skip List Search)链表分层索引(O(\log n))(O(n))(O(n))概率平衡结构,并发写入性能远超红黑树(Redis zset 核心)
三分查找 (Ternary Search)单峰 / 单谷函数(O(\log n))(O(\log n))(O(1))凸函数求极值,每次缩小三分之一搜索区间
哈希查找 (Hash Lookup)构造哈希映射表(O(1))(O(n))(O(n))均摊常数时间,最坏取决于哈希冲突处理(拉链/开放寻址)
快速选择 (Quickselect)无序数组求第 K 小(O(n))(O(n^2))(O(1)) 原地基于快排分区,每轮仅递归一侧,平均线性时间(std::nth_element)
中位数的中位数 (BFPRT)无序数组求第 K 小(O(n))(O(n)) 严格线性(O(\log n))5 元组划分求基准点,理论最坏时间严格保障线性
内省选择 (Introselect)无序数组求第 K 小(O(n))(O(n \log n))(O(\log n))工业标准:Quickselect 配合递归深限切 BFPRT / 堆排

3. 经典图论算法 (Graph Algorithms)

记图的顶点数为 (V),边数为 (E):

算法名称 (英文)求解问题目标时间复杂度辅助空间核心约束与算法特性
广度优先搜索 (BFS)无权图单源最短路 / 遍历(O(V + E))(O(V))队列先入先出,逐层向外扩展,天然得到无权图最短路
深度优先搜索 (DFS)拓扑图遍历 / 连通性(O(V + E))(O(V))栈递归回溯,是 Tarjan、强连通分量与拓扑排序的核心底座
0-1 BFS边权仅为 0 或 1 的最短路(O(V + E))(O(V))双端队列(Deque),0 权插队头,1 权插队尾,线性完成最短路
Dijkstra (二叉堆优化)非负权图单源最短路(O((V + E) \log V))(O(V))贪心松弛,严禁存在负权边;稠密图建议使用二叉堆或斐波那契堆
Dijkstra (斐波那契堆)非负权图单源最短路(O(E + V \log V))(O(V))理论界最优,但常数极大,实际工程通常使用四叉堆或二叉堆
Bellman-Ford带负权图单源最短路(O(V \cdot E))(O(V))迭代松弛 (V-1) 轮,可检测是否存在负权回路
SPFA (队列优化 Bellman)单源最短路 / 负权检测平均 (O(kE)),最坏 (O(VE))(O(V))网格图或特定构造卡常图极易退化回 (O(VE)),非负权慎用
Floyd-Warshall全源最短路 (APSP)(O(V^3))(O(V^2))动态规划三重循环,代码极简,支持负权边,矩阵表示
Johnson 算法稀疏带负权全源最短路(O(V^2 \log V + VE))(O(V + E))结合 Bellman-Ford 势能重标号消除负权,再调用 (V) 次 Dijkstra
A* 启发式搜索终点定向最短路径规划启发函数决定(O(V))估价函数 (f(n) = g(n) + h(n)),(h(n)) 可采纳时保证最优解
Kahn 拓扑排序有向无环图 (DAG) 拓扑序(O(V + E))(O(V))入度统计入队法,若出队点数 (< V) 则判定图中存在有向环
Kruskal (并查集)最小生成树 (MST)(O(E \log E))(O(V))边贪心排序 + 并查集判圈,极其适合稀疏图
Prim (二叉堆)最小生成树 (MST)(O((V + E) \log V))(O(V))点切分定理扩展,稠密图((E \approx V^2))表现优异
Borůvka 算法最小生成树 (MST)(O(E \log V))(O(V))每轮各连通块独立并行找最小边,天然适合并行计算与分布式图处理
Tarjan (强连通分量 SCC)有向图极大强连通子图(O(V + E))(O(V))单次 DFS 维护时间戳 dfn 与追溯值 low,缩点建 DAG
Kosaraju 算法有向图强连通分量(O(V + E))(O(V))原图 DFS 拓扑排序后,在反向图上逆序 DFS 划分连通分量
Tarjan 割点与割桥无向图双连通分量(O(V + E))(O(V))割点:(low[v] \ge dfn[u]);割桥:(low[v] > dfn[u])
匈牙利算法 (增广路)二分图最大匹配(O(V \cdot E))(O(V))寻找增广路径翻转匹配边,实现简单,适合中小规模图
Hopcroft-Karp二分图最大匹配(O(E \sqrt{V}))(O(V))BFS 寻找最短增广路分层,DFS 多路增广,大规模二分图标准
Dinic 算法网络最大流(O(V^2 E)) (二分图 (O(E \sqrt{V})))(O(V + E))结合残量网络 BFS 分层与当前弧优化 DFS 阻塞流,实战极快
ISAP (预流推进变体)网络最大流(O(V^2 E))(O(V + E))逆向全局标记高度标号,间隙优化(Gap Heuristic)避免无效退回
Push-Relabel (最高标号)网络最大流(O(V^2 \sqrt{E}))(O(V))独立顶点推流与重标号,理论界极高,适合超稠密最大流网络
MCMF (连续最短路)最小费用最大流视最短路算法而定(O(V + E))每次在残量网络沿费用最短路(SPFA/Primal-Dual)进行增广

4. 字符串匹配与文本索引 (String Algorithms)

记主串长度为 (N),模式串长度为 (M):

算法名称 (英文)核心解决问题预处理时间/空间匹配检索时间算法机制与工程价值
朴素匹配 (Brute Force)单模式串精确匹配(O(1)) / (O(1))平均 (O(N)),最坏 (O(NM))暴力双指针,最坏退化,小字符集慎用
KMP 算法单模式串精确匹配(O(M)) / (O(M))(O(N)) 严格线性利用前缀函数(next 数组),失配时不回溯主串指针
Boyer-Moore (BM)现代编辑器检索首选(O(M +\Sigma))
Sunday / Horspool高性能单模检索(O(M +\Sigma))
Rabin-Karp滚动哈希模式匹配(O(M)) / (O(1))平均 (O(N+M)),最坏 (O(NM))针对哈希冲突进行二次比对,天然支持多模式串与二维字符矩阵匹配
Z 算法 (扩展 KMP)匹配主串各后缀最长前缀(O(N+M))(O(N+M))计算 z[i](以 (i) 开头后缀与前缀的最长公共前缀 LCP)
Trie 字典树字符串集合前缀检索插入 (O(M))(O(M)) 单词长度共享公共前缀,海量搜索提示、敏感词前缀过滤核心
AC 自动机 (Aho-Corasick)多模式串同时匹配(O(\sum M_i))(O(N + \text{matches}))Trie 树上构建类似 KMP 的失败指针(Fail Pointer),风控与敏感词过滤事实标准
Manacher (马拉车)最长回文子串(O(N)) / (O(N))(O(N)) 线性插入分隔符对齐奇偶回文,利用回文对称性加速扩张
后缀数组 (SA-IS / DC3)全局后缀排序与 LCP(O(N)) / (O(N))(O(M \log N)) 二分SA-IS 算法达成严格线性时间构建,配合 Height 数组解决海量子串问题
后缀自动机 (SAM)识别所有子串的最小 DFA(O(N \cdot\Sigma))
FM 索引 (FM-Index)压缩全文字典检索基于 BWT 变换(O(M)) 亚线性结合 Burrows-Wheeler 变换与小波树,生物信息基因比对(Bowtie/BWA)标准

5. 核心数据结构基础操作 (Data Structures Complexity)

数据结构 (英文)随机访问头部插入/删除尾部插入/删除任意搜索检索核心优势与内存空间开销
动态数组 (Vector / ArrayList)(O(1))(O(n))均摊 (O(1))(O(n))内存物理连续,CPU 缓存命中极高,尾部倍增扩容
单向 / 双向链表 (Linked List)(O(n))(O(1))双向且持指针 (O(1))(O(n))节点离散分配无扩容峰值;指针域产生额外内存开销,缓存不友好
栈与队列 (Stack / Queue)不支持(O(1)) 出入(O(1)) 出入(O(n))限制访问点的线性结构,LIFO(先进后出)/ FIFO(先进先出)
双端队列 (Deque)环形数组 (O(1))(O(1))(O(1))(O(n))两端均支持高效出入,单调队列与广义任务调度的容器
单调栈 / 单调队列--均摊 (O(1))-维护元素单调性,在线性 (O(n)) 时间内求解滑动窗口极值与下一个更大元素
哈希表 (Hash Table)-插入均摊 (O(1))删除均摊 (O(1))均摊 (O(1))最坏 (O(n)) 取决冲突;负载因子达到阈值需触发 Rehash 重新分配
二叉搜索树 (BST)不支持平均 (O(\log n))平均 (O(\log n))最坏 (O(n))未平衡时顺序插入会完全退化为单链表
AVL 树不支持严格 (O(\log n))严格 (O(\log n))严格 (O(\log n))严格高度平衡(左右高度差 (\le 1)),查询快,插入删除旋转频繁
红黑树 (Red-Black Tree)不支持严格 (O(\log n))严格 (O(\log n))严格 (O(\log n))黑色平衡,最多旋转 3 次,插入删除性能均衡(Linux 调度器、C++ std::map)
伸展树 (Splay Tree)不支持均摊 (O(\log n))均摊 (O(\log n))均摊 (O(\log n))刚访问的节点双旋至根,自适应局部缓存强,LCT 动态树的底层基石
Treap (树堆)不支持期望 (O(\log n))期望 (O(\log n))期望 (O(\log n))键值满足 BST、随机优先级满足二叉堆,代码极易编写,抗卡常
替罪羊树 (Scapegoat Tree)不支持均摊 (O(\log n))均摊 (O(\log n))最坏 (O(\log n))不用旋转,不平衡率超过阈值 (\alpha) 时直接重构整棵子树
树状数组 (Fenwick Tree / BIT)-单点修改 (O(\log n))-前缀和 (O(\log n))利用 lowbit(x) 树状分解,常数与代码极短,占用空间完全等同原数组
线段树 (Segment Tree)-单点/区间修改 (O(\log n))-区间查询 (O(\log n))借助 Lazy-Tag 支持任意结合律区间操作,空间需开 (4n) 大小
并查集 (Disjoint Set Union)-合并 (\alpha(n))-查询祖先 (\alpha(n))路径压缩 + 按秩合并,反阿克曼函数 (\alpha(n) \le 4),几乎等于常数
二叉二叉堆 (Binary Heap)查询极值 (O(1))插入 (O(\log n))弹出极值 (O(\log n))(O(n))优先队列标准实现,完全二叉树物理紧凑映射至一维数组
斐波那契堆 (Fibonacci Heap)查询极值 (O(1))插入 (O(1))弹出极值 (O(\log n))减小键值 均摊 (O(1))理论合并与改值最优,Dijkstra 理论加速利器
配对堆 (Pairing Heap)查询极值 (O(1))插入 (O(1))弹出极值均摊 (O(\log n))合并 (O(1))结构极简,实战性能显著超越斐波那契堆
可持久化线段树 (主席树)-单次版本创建 (O(\log n))-历史版本查询 (O(\log n))每次修改只复制改变的路径节点,空间 (O(n \log n)),区间第 K 大利器

6. 数论与数值计算算法 (Number Theory & Numerics)

算法名称 (英文)核心数学目标时间复杂度辅助空间核心算法机制与应用边界
辗转相除法 (欧几里得 GCD)求解最大公约数(O(\log(\min(a, b))))(O(1))连续取模迭代,对数级步数收敛
扩展欧几里得 (exGCD)求解不定方程 (ax + by = \gcd(a, b))(O(\log(\min(a, b))))(O(1))递归回溯,求解乘法逆元与模线性方程的底层基座
快速幂 (Binary Exponentiation)快速求解 (a^b \pmod m)(O(\log b))(O(1))二进制拆分指数,矩阵快速幂可将递推数列(如斐波那契)加速至对数级
线性筛法 (欧拉筛)(O(n)) 时间筛选 (1 \sim n) 内全部素数(O(n)) 严格线性(O(n))保证每个合数只被其最小质因数筛除一次,同步线性计算积性函数((\mu, \phi))
埃氏筛法 (Sieve of Eratosthenes)筛选区间内所有素数(O(n \log \log n))(O(n))每个质数标记其倍数,存在重复标记,但实现简单
Miller-Rabin 素性检验概率性判断大整数是否为素数(O(k \log^3 n))(O(1))基于费马小定理与二次探测定理,取前 12 个固定底数可确定性判定 (2^{64}) 内素数
Pollard’s Rho 启发式分解大整数质因数分解期望 (O(n^{1/4}))(O(1))构造伪随机多项式序列结合 Birthday 碰撞悖论与 Floyd 判圈寻找因子
中国剩余定理 (CRT)求解一元模线性同余方程组(O(k \log m))(O(1))模数两两互质时构造解析解;扩展 CRT (exCRT) 可利用 exGCD 处理不互质情形
快速傅里叶变换 (FFT)(O(n \log n)) 计算多项式卷积乘法(O(n \log n))(O(n))单位复数根分治折半,将传统 (O(n^2)) 卷积降至对数级,大数乘法核心
快速数论变换 (NTT)整数域下的多项式乘法(O(n \log n))(O(n))使用原根代换单位复数根,彻底消除 FFT 的浮点数精度截断误差
高斯消元法 (Gaussian Elimination)求解 (n) 元一次线性方程组(O(n^3))(O(n^2))矩阵初等行列变换化为上三角阶梯矩阵,结合异或运算可解模 2 异或方程组

7. 计算几何算法 (Computational Geometry)

算法名称 (英文)核心几何目标时间复杂度辅助空间核心算法特性与避坑点
Graham 扫描法二维点集凸包构建(O(n \log n))(O(n))极角排序后单调栈维护左转判定,易受共线点精度浮点误差干扰
Andrew 单调链法二维点集凸包构建(O(n \log n))(O(n))按横纵双坐标排序,分别构建上下凸壳,常数更小、数值稳定性优于 Graham
旋转卡壳 (Rotating Calipers)凸多边形直径 / 最小外接矩形(O(n))(O(1))在已构建的凸包上逆时针平行卡尺旋转,求最远点对只需线性时间
半平面交 (Half-Plane Intersection)多边形核 / 凸多边形交集(O(n \log n))(O(n))极角排序有向直线,双端队列维护半平面交边界,常用于可见区域计算
分治法最近点对平面 (n) 个点中寻找最小距离(O(n \log n))(O(n))横坐标分治,中间带区域按纵坐标排序至多考察后 6 个临近点
光线投射法 (Ray Casting)判定点是否在多边形内部(O(n))(O(1))向任意方向发射射线,统计与多边形边界交点奇偶性(奇内偶外)
KD-Tree 空间近邻(K) 维高维空间多点检索构建 (O(n \log n))
查询期望 (O(\log n))
(O(n))交替沿各维度中位数超平面二分空间,高维空间退化,适合低维空间近邻搜索