复杂度分析:如何分析,统计算法的执行效率和资源消耗
- 算法和数据结构解决的是“快”和“省”的问题,即如何让代码运行的更快,如何让代码更节省资源。
- 复杂度分析是整个算法学习的精髓,只要掌握了它,算法和数据结构就掌握了一半了
为什么需要复杂度分析
事后统计法
- 测试结果非常依赖于测试环境
- 测试结果规模受数据规模影响很大
我们需要一个不需要依赖于测试环境,就可以粗略的估算整个算法的执行效率的方法
大O复杂度表示法
所有代码的执行时间T(n)与每行代码的执行次数n成正比。
公式: T(n) = O(f(n))
- T(n) 它表示代码执行的时间
- n 代表示数据规模的大小
- f(n) 表示每行代码执行次数的总数。
大O时间复杂度表示法
大O时间复杂度实际上并不具体表示代码真正运行的时间,而是表示代码执行时间随着数据规模增长的变化趋势。所以,也叫做渐进复杂度分析(asymptotic time complexity),简称时间复杂度
时间复杂度分析
这有三种比较实用的方法,进行时间复杂度分析
- 只关注循环次数最多的一段代码
- 加法法则,总复杂度等于量级最大的那段代码的复杂度
- 乘法法则,嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
空间复杂度分析
渐进空间复杂度:算法的执行所需要的空间与数据规模之间的增长关系表示