前言:
- 时间复杂度与空间复杂度是衡量一个算法的重要标准,统称为算法复杂度。
算法:对于特定问题求解步骤的描述。
特性:输入,输出,有穷性,确定性,可行性。
要求:正确性,可读性,鲁棒性,低存储高效性,简单性。
一个算法存在最好,最差,平均三种情况,但我们通常关注的最坏的情况,理由如下:
- 一个算法的最坏情况的运行时间是在任意输入下的运行时间上界;
- 对于某些算法,最坏情况出现情况较为频繁;
- 大体上看,平均情况与最坏情况一样差;
*
时间复杂度:语句总的执行次数与问题规模n的函数表达式
一般算法时间复杂度的计算方法:
- 用常数1取代运行时间中所有的加法常数
- 在修改后的运行次数函数中,只保留最高阶
- 如果最高阶项系数存在而且不是1,则去除与这个项相乘的常数,把它变为1
空间复杂度:函数中创建对象的个数关于问题的规模函数表达式
一般算法时间复杂度的计算方法:
- 创建变量的个数
区别:时间是累积的,但是空间不是累积的,可重复使用。
分治算法的时间复杂度
最常见的是折半查找,既二分查找的时间复杂度。如果有N个数,把这个序列转换为一颗二叉搜索树,既这棵树有N个结点,它查找一个结点需要比较那个结点所在的深度次。最大比较次数为树的深度,既㏒₂N,所以它的时间复杂度为O(㏒₂N),我们经常把它简写成O(㏒N)。
递归算法的时间复杂度和空间复杂度
- 时间复杂度=递归的总次数*每次递归函数里边执行的次数
- 空间复杂度:递归的深度*每次栈帧的个数
常用的时间复杂度所耗费的时间从小到大依次是:
结语:
黑夜给了你,宁静的时光,你应该用它来干嘛呢?