时间复杂度特集

定义法计算时间复杂度

单层循环

O(n)

  • 求和符号下面的是i能够取到的值域的集合,前面的1指的是每一次循环进来以后每个基本语句都会执行一次

O(logn)

线性变化嵌套循环

  • 从左到右,从外层循环到内层循环写求和公式
  • 解的时候从里向外解

内外变量互不干扰

内层循环取决于外层变量

指数变化嵌套循环

  • 从外层循环向内层循环去写,最里面是核心语句
  • 解的时候从内向外解

外层线性变化,内层指数变化,外层限制内层

  • 对内层循环变量j来讲,它是每执行一次,然后进行判断,当它自增一次的时候,count++已经执行了两次

外层指数变化,内层线性变化,外层限制内层

三重循环

线性变化,外层限制内层

个人总结——时间复杂度计算

内外嵌套变量关系循环

  • 内外嵌套,写级数
    • 最内层为单次的循环个数,求和符号上方写范围,下方写取值集合

函数调用类

  • 递归树

主定理

重点比较

408图论算法复杂度+适用场景(含负权边/负环)

算法 / 存储结构 时间复杂度 空间复杂度 适用场景 说明
邻接矩阵 —— O(V²) 稠密图 查询边是否存在快 O(1),遍历慢 O(V)
邻接表 —— O(V+E) 稀疏图 遍历快 O(V+E),查询边是否存在慢 O(deg(v))
十字链表(有向图) —— O(V+E) 需要同时高效处理出度和入度的有向图 每条边存两次引用
邻接多重表(无向图) —— O(V+E) 需要避免无向边重复存储 每条边只存一次结点
DFS(邻接表) O(V+E) O(V+E) 遍历所有顶点与边;拓扑排序;连通分量;检测环 深度优先搜索
DFS(邻接矩阵) O(V²) O(V²) 小规模稠密图遍历 遍历邻接点需扫一行
BFS(邻接表) O(V+E) O(V+E) 无权图最短路径;分层遍历;连通分量 队列实现、广度优先搜索
BFS(邻接矩阵) O(V²) O(V²) 小规模稠密图遍历
拓扑排序(邻接表) O(V+E) O(V+E) DAG 的线性序;任务调度;编译依赖 常用 Kahn 算法(队列)或 DFS
拓扑排序(邻接矩阵) O(V²) O(V²) 小规模稠密图 每次找入度=0 需扫一列
Prim 算法(朴素版,邻接矩阵) O(V²) O(V²) 稠密图最小生成树 每次扫描所有顶点选最小边
Prim 算法(堆优化版,邻接表) O(E log V) O(V+E) 稀疏图最小生成树 用优先队列维护候选边
Kruskal 算法 O(E log E)≈O(E log V) O(V+E) 稀疏图最小生成树 边排序 + 并查集
Dijkstra(朴素版,邻接矩阵) O(V²) O(V²) 稠密图,单源最短路径(不允许负权边 每次找最近点 O(V)
Dijkstra(堆优化,邻接表) O(E log V) O(V+E) 稀疏图,单源最短路径(不允许负权边 用堆维护最短距离
Floyd 算法 O(V³) O(V²) 多源最短路径,小规模稠密图,允许负权边;可检测负环(dist[i][i]<0 若有负环则无解
Bellman-Ford 算法 O(VE) O(V+E) 单源最短路径,允许负权边;可检测负环(松弛 V 次后仍变化) 若有负环则无解
SPFA 算法 平均 O(E),最坏 O(VE) O(V+E) 单源最短路径,允许负权边;可检测负环(某点入队 ≥ V 次) 若有负环则无解
三元组表(边集数组) —— O(E) 适合稀疏图;常用于 Bellman-Ford、Kruskal、SPFA 每条边存 (i,j,w),遍历邻接点效率低

并查集三个阶段的时间复杂度

查找算法时间复杂度表

排序算法时间复杂度表

排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性 就地性 适用数据对象 比较次数与初始状态关系 移动次数与初始状态关系 排序趟数与初始状态关系
插入排序 O(n²) O(n) O(n²) O(1) ✔ 稳定 原地 数组/链表 有关 有关 无关
折半插入 O(n²) O(nlogn) O(n²) O(1) ✔ 稳定 原地 数组 无关 有关 无关
希尔排序 O(n^1.3) O(n log n) O(n²) O(1) ✘ 不稳定 原地 数组 有关 有关 无关
冒泡排序 O(n²) O(n) O(n²) O(1) ✔ 稳定 原地 数组/链表 有关 有关 有关
快速排序 O(n log n) O(n log n) O(n²) O(log n) ✘ 不稳定 原地 数组 有关 有关 有关
选择排序 O(n²) O(n²) O(n²) O(1) ✘ 不稳定 原地 数组/链表 无关 有关 无关
堆排序 O(n log n) O(n log n) O(n log n) O(1) ✘ 不稳定 原地 数组 有关 有关 无关
归并排序 O(n log n) O(n log n) O(n log n) O(n) ✔ 稳定 非原地 数组/链表 有关 无关 无关
计数排序 O(n+k) O(n+k) O(n+k) O(n+k) ✔ 稳定 非原地 数组 无关 无关 无关
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r))顺序基数排序O(n + r)
链式基数排序O®
✔ 稳定 非原地 数组 无关 无关 无关
桶排序 O(n+k) O(n+k) O(n²) O(n+k) ✔ 稳定 非原地 数组 无关 无关 无关

时间复杂度特集
http://example.com/2025/04/02/时间复杂度特集/
作者
Kugeln
发布于
2025年4月2日
许可协议