复杂度分析

 

时间复杂度

推导大O阶:

  • 顺序执行的代码只会影响常数项,可以忽略
  • 对于循环只需挑一个循环中的任意基本操作分析执行次数即可
  • 如果有多层嵌套循环,只需关注最深层循环的执行次数

  • 很多算法执行时间与输入数据有关,这种需要考虑最好和最坏时间复杂度,以及平均复杂度

  • 加法规则

  • 乘法规则

空间复杂度

程序运行时的内存主要包括程序代码(大小固定)、数据(包括常量、数组)。

  • 普通程序:只关注找到所占空间大小与问题规模相关的变量,分析所占空间$x$与问题规模$n$的关系 $x=f(n)$
  • 递归程序:找到递归调用的深度$x$与问题规模$n$的关系$x=f(n)$