时间复杂度和空间复杂度的详细解释
1、时间复杂度
时间复杂度不是单纯意义上的程序的运行时间,因为程序在不同配置的设备上的运行时间是不同的,而且即使程序在同一个设备上运行程序,由于系统环境的不同,导致程序的运行时间存在差异。
因此,我们衡量的时间度复杂度是一个合理的估计值:程序所有语句的执行次数总和,即整段代码的频度。此处代码的频度值为估计值,即代码频度的最大值,例如,代码中的循环语句,我们假设循环全部执行;最后出现的频度最大值的表达式一般为关于n的多项式结构,我们可令n趋向于五项大,将多项式简化为一个因式,(此处涉及等价无穷小和高阶无穷小的知识,不在此处赘述)然后用O(因式)表示时间复杂度。
某些实际场景中,还可能用最好情况下的频度和最坏情况下的频度的平均值来作为算法的时间复杂度。
2、空间复杂度
空间复杂度 = 代码所占内存 + 数据输入输出所占内存 + 代码运行所申请的临时存储空间
对算法的空间复杂度影响最大的,往往是程序运行过程中所申请的临时存储空间,如果程序所占用的存储空间和输入值无关,则该程序的空间复杂度就为 O(1);反之, 则需要进一步判断:
若随着输入值 n 的增大,
- 程序申请的临时空间成线性增长,则程序的空间复杂度 O(n) 表示;
- 程序申请的临时空间成
关系增长,则程序的空间复杂度用 O(
) 表示;
- 程序申请的临时空间成
关系增长,则程序的空间复杂度用 O(
) 表示;
- 等。
多数场景,一个好的算法往往更注重时间复杂度,而空间复杂度只需在一个合理的范围内。
主要参考的文章如下:
时间复杂度和空间复杂度(详解版) (biancheng.net)http://data.biancheng.net/view/272.html