目录

  1. 复杂度基础概念
  2. 时间复杂度详解
  3. 空间复杂度详解
  4. 常见算法时间复杂度示例
  5. 常见数据结构操作时间复杂度
  6. 复杂度计算技巧与常见误区
  7. 总结

1️⃣ 复杂度基础概念

  • 时间复杂度(Time Complexity):算法执行所需时间与输入规模之间的关系,通常用大O符号表示,反映算法的运行效率。
  • 空间复杂度(Space Complexity):算法执行过程中占用的额外内存空间与输入规模的关系。

2️⃣ 时间复杂度详解

常见时间复杂度类型

复杂度描述示例说明
O(1)常数时间访问数组元素不随输入规模变化
O(log n)对数时间二分查找每步减少问题规模一半
O(n)线性时间顺序遍历数组需访问每个元素
O(n log n)线性对数时间归并排序、快速排序排序类最优时间复杂度
O(n²)平方时间嵌套循环两层双重循环遍历
O(n³)立方时间三重嵌套循环三层嵌套循环
O(2^n)指数时间斐波那契递归(朴素)输入规模每增加1,时间翻倍
O(n!)阶乘时间全排列问题计算量极大,规模稍大即难以计算

3️⃣ 空间复杂度详解

  • 通常统计辅助空间,不包括输入本身所占空间。
  • 例如递归调用栈空间也计入空间复杂度。
  • 典型空间复杂度示例:
复杂度说明示例
O(1)常数空间变量个数固定
O(n)线性空间额外数组或链表存储
O(n²)二维数组存储矩阵相关算法
O(log n)递归调用栈空间二分查找递归

4️⃣ 常见算法时间复杂度示例

算法时间复杂度说明
线性搜索O(n)顺序遍历查找
二分查找O(log n)排序数组中折半查找
冒泡排序O(n²)双重嵌套循环比较交换
快速排序平均 O(n log n)分治递归排序
归并排序O(n log n)分治归并排序
插入排序最坏 O(n²),最好O(n)插入有序部分,依赖输入数组近似有序程度
斐波那契递归O(2^n)重复计算子问题
动态规划(斐波那契)O(n)记忆化避免重复计算

5️⃣ 常见数据结构操作时间复杂度

数据结构插入删除查找访问
数组O(n)O(n)O(n)O(1)
链表O(1)*O(1)*O(n)O(n)
O(1)O(1)O(n)O(n)
队列O(1)O(1)O(n)O(n)
哈希表O(1)均摊O(1)均摊O(1)均摊不适用
二叉搜索树(平均)O(log n)O(log n)O(log n)不适用
二叉搜索树(最坏)O(n)O(n)O(n)不适用
O(log n)O(log n)O(n)不适用

* 链表插入和删除时间复杂度O(1)是基于已知节点指针。


6️⃣ 复杂度计算技巧与常见误区

  • 忽略常数项和低阶项,如 O(2n)简化为 O(n)。
  • 递归复杂度分析,可用递推关系和主定理解决。
  • 区分最好、平均、最坏情况复杂度
  • 空间复杂度一般指额外开销,不包含输入本身
  • 注意数据结构操作细节,实际性能也受常数因子影响

7️⃣ 总结

  • 时间复杂度和空间复杂度是评价算法优劣的重要指标。
  • 不同算法和数据结构对应不同复杂度,选择时需权衡。
  • 理解复杂度有助于写出高效代码,避免性能瓶颈。
  • 建议多用实例练习计算复杂度,结合代码理解。