时间复杂度和空间复杂度

算法效率(以时间换取空间;以空间换取时间)

算法效率分为两种:时间效率和空间效率。
时间效率称为时间复杂度,主要是用来衡量一个算法的运行速度;空间效率称为空间复杂度,是用来衡量一个算法所需要的额外的空间。

时间复杂度

算法中基本操作放的执行次数,为算法的时间复杂度
时间复杂度的计算使用是使用大O的渐进表示法,其中大O符号是用于描述函数渐进行为的数学符号。
大O的渐进表示法:找到幂数最高的,只保留最高阶,系数去掉
推导大O阶方法:

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
    有些算法的时间复杂度存在最好、平均和最坏情况
    最坏情况:任意输入规模的最大运行次数(上界)
    平均情况:任意输入规模的期望运行次数
    最好情况:任意输入规模的最小运行次数(下界)
  • 例如:在一个长度为N数组中搜索一个数据x
    最好情况:1次找到
    最坏情况:N次找到
    平均情况:N/2次找到
  • 在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)

空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,计算的是变量的个数。
空间复杂度的计算也是用大O渐进表示法。

各种排序算法的时间空间复杂度

时间复杂度和空间复杂度