算法复杂度一览表

探索各类算法的时间和空间复杂度,了解不同算法在执行效率和内存使用上的表现与权衡。

什么是算法复杂度?

算法复杂度是衡量算法性能的重要指标,主要包括时间复杂度(执行时间)和空间复杂度(内存使用)。复杂度通常使用大O表示法(Big O Notation)来描述算法在最坏情况下的性能上界。

时间复杂度对比

操作次数增长率:
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)

空间复杂度

  • O(1):常量空间复杂度,算法所需空间与输入规模无关。如简单计算、原地排序算法等。
  • O(log n):对数空间复杂度,空间需求随输入增长而缓慢增加。常见于分治算法如二分查找。
  • O(n):线性空间复杂度,空间需求与输入规模成正比。如需要额外数组的算法。
  • O(n²):平方空间复杂度,空间需求与输入规模的平方成正比。如需要二维数组的动态规划。

排序算法

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
冒泡排序 O(n) O(n²) O(1)
选择排序 O(n²)
插入排序 O(n)
归并排序 O(n log n) O(n log n) O(n)
快速排序 O(n²) O(log n)
堆排序 O(n log n) O(1)
计数排序 O(n + k) O(n + k)
基数排序 O(n * k)
桶排序 O(n) O(n + k) O(n²)
希尔排序 O(n log n) O(n log² n) O(1)

查找算法

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
线性查找 O(1) O(n) O(1)
二分查找 O(log n)
跳跃查找 O(√n)
插值查找 O(log log n) O(n)
哈希查找 O(1) O(n)

线性数据结构

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
数组 - 访问 O(1) O(1) O(1)
数组 - 插入 O(n)
数组 - 删除
链表 - 访问
链表 - 插入 O(1)
链表 - 删除
- 基本操作
队列 - 基本操作

树形数据结构

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
二叉搜索树 - 查找 O(log n) O(log n) O(n) O(1)
二叉搜索树 - 插入
AVL树 - 基本操作 O(log n) O(n)
红黑树 - 基本操作
- 基本操作 O(1) O(1)
Trie树 - 基本操作 O(m) O(n*m)

图形数据结构

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
邻接矩阵 - 访问 O(1) O(V²)
邻接矩阵 - 搜索
邻接矩阵 - 插入
邻接矩阵 - 删除
邻接矩阵 - 遍历 O(V²)
邻接表 - 访问 O(1) O(1) O(V) O(V+E)
邻接表 - 搜索 O(V)
邻接表 - 插入 O(1)
邻接表 - 删除 O(E)
邻接表 - 遍历 O(V+E)
边列表 - 访问 O(1) O(E) O(E)
边列表 - 搜索
边列表 - 插入 O(1)
边列表 - 删除
边列表 - 遍历 O(E)
有向图 - 基本操作 O(1) O(V+E)
无向图 - 基本操作
加权图 - 基本操作
有向无环图(DAG) - 基本操作

哈希与映射

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
哈希表 - 基本操作 O(1) O(n)
布隆过滤器 - 基本操作 O(k) O(m)

高级数据结构

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
并查集 - 基本操作 O(1) O(α(n)) O(n)
跳表 - 基本操作 O(log n) O(n)

图论算法

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
广度优先搜索 O(V + E) O(V)
深度优先搜索
Dijkstra最短路径 O(V² + E)
Bellman-Ford算法 O(V * E)
Floyd-Warshall算法 O(V³) O(V²)
Kruskal最小生成树 O(E log E) O(V + E)
Prim最小生成树 O(E log V) O(V)
拓扑排序 O(V + E)

字符串算法

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
KMP算法 O(n) O(m + n) O(m + n) O(m)
Rabin-Karp算法 O(m * n) O(1)
Boyer-Moore算法 O(n/m) O(n) O(m)

数论算法

算法名称 最佳时间复杂度 ⓘ 平均时间复杂度 ⓘ 最差时间复杂度 ⓘ 空间复杂度 ⓘ
欧几里得算法(GCD) O(1) O(log min(a,b)) O(1)
快速幂 O(log n)
埃拉托斯特尼筛法 O(n log log n) O(n)
模逆元计算 O(n³) O(n²)

0 条评论

目前还没有评论...