复杂度分析(上)

复杂度分析:如何分析,统计算法的执行效率和资源消耗

  • 算法和数据结构解决的是“快”和“省”的问题,即如何让代码运行的更快,如何让代码更节省资源。
  • 复杂度分析是整个算法学习的精髓,只要掌握了它,算法和数据结构就掌握了一半了

为什么需要复杂度分析

事后统计法

  • 测试结果非常依赖于测试环境
  • 测试结果规模受数据规模影响很大

我们需要一个不需要依赖于测试环境,就可以粗略的估算整个算法的执行效率的方法

大O复杂度表示法
  • 所有代码的执行时间T(n)与每行代码的执行次数n成正比。

    • 公式: T(n) = O(f(n))

      • T(n) 它表示代码执行的时间
      • n 代表示数据规模的大小
      • f(n) 表示每行代码执行次数的总数。

大O时间复杂度表示法

大O时间复杂度实际上并不具体表示代码真正运行的时间,而是表示代码执行时间随着数据规模增长的变化趋势。所以,也叫做渐进复杂度分析(asymptotic time complexity),简称时间复杂度

时间复杂度分析

这有三种比较实用的方法,进行时间复杂度分析

  1. 只关注循环次数最多的一段代码
  2. 加法法则,总复杂度等于量级最大的那段代码的复杂度
  3. 乘法法则,嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

空间复杂度分析

渐进空间复杂度:算法的执行所需要的空间与数据规模之间的增长关系表示