Skip to content

算法

算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。

应该如何去衡量不同算法之间的优劣呢?主要从算法所占用的「时间」和「空间」两个维度去考量。

  • 时间维度:是指执行当前算法所消耗的时间,我们通常用**「时间复杂度」**来描述。
  • 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用**「空间复杂度」**来描述。

时间复杂度

时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度

算法的耗时是随着n的变化而变化,因此,我们可以简化的将这个算法的时间复杂度表示为:T(n) = O(n),因为大O符号表示法并不是用于来真实代表算法的执行时间的,它是用来表示代码执行时间的增长变化趋势的。

常见的时间复杂度量级有:

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(n^k)
  • 指数阶(2^n)

空间复杂度

空间复杂度也不是用来计算程序实际占用的空间的,是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 O(n) 来定义。

空间复杂度比较常用的有:O(1)、O(n)、O(n²)。