算法复杂度

算法复杂度是我们学习算法过程中绕不开的,理解了复杂度,对写出性能更佳、更优雅的代码是大有裨益的。

算法复杂度

算法的复杂度指的是执行该算法的程序在运行时所需要的时间和空间(内存)资源,复杂度分析一般从时间复杂度和空间复杂度两个层面来考虑。

时间复杂度

描述算法运行时长的量度, T(n) = O(f(n)),函数T(n) 为算法操作执行次数,O为算法的渐进时间复杂度,简称时间复杂度。

空间复杂度

一个算法在运行过程中临时占用存储空间大小的量度,记作 S(n)=O(f(n))

常见的复杂度量级从低到高:

  • 常数阶O(1)
  • 对数阶O(logn)
  • 线性阶O(n)
  • 线性对数阶O(nlogn)
  • 方阶O(n^k)(k>1)
  • 指数阶O(2^n)
  • 阶乘阶O(n!)

两个法则

  1. 加法法则:总复杂度等于量级最大的那段代码的复杂度
  2. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

业务场景中,复杂度其实很多时候跟数据有很大的关系,并不是一成不变的,这点是需要引起注意的。

拓展知识

  • 最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)。
  • 主定理(Master Theorem)

关注和赞赏都是对小欧莫大的支持! 🤝 🤝 🤝
公众号