Appearance
算法
算法(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²)。