算法与数据结构(二) -算法的时间复杂度和空间复杂度

衡量一个算法的好坏从两个方面衡量:时间复杂度和空间复杂度

时间复杂度

算法在计算时所占用的时间;在考虑一个算法要计算多长时间的时候,受到计算机等不稳定因素的影响,并不能准确计算出时间,算法执行的语句时非常固定的,所以可以根据这个来计算,也叫做"句频T(n)",语句的频度是指一个算法中的语句执行的次数,记作T(n)
每个算法都会满足某个函数
算法与数据结构(二) -算法的时间复杂度和空间复杂度
一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n无线趋近于无穷大时,T(n) / f(n)的极限值是不等于零的常数,则f(n)是T(n)的同数量级函数,记作T(n) = O(f(n)),O(f(n))就是时间复杂度。
T(n)不同,也就是函数不同,但是时间复杂度是用可能相同的,比如说T(n) = n^2 +1和T(n) = 9n + n^2 - 1,他们的O(f(n))都是O(n^2)

常见的时间复杂度

  1. 常数阶O(1)
    指的是与问题的大小无关,执行的时间是恒定的,比如说计算1 + 100 ,执行的时间,执行的内容是恒定的
  2. 对数阶O(log2n)
  3. 线性阶O(n)
  4. 线性对数阶O(nlog2n)
  5. 平方阶O(n^2)
  6. 立方阶O(n^3)
  7. k次方阶O(n^k)
  8. 指数阶O(2n)
    从1到8,随着n的不断增大,时间复杂度不断增大,算法的执行效率就会越低

如何计算时间复杂度

前提是要知道算法是怎么写的,然后把算法通过一个函数表示出来
用常数1代替运行时间中的所有加法常数,修改后的运行册数函数中,只保留最高阶项,去除最高阶项的系数。
比如说2n^2 + 3n 去掉最高阶项系数并保存最高阶项为n^2

平均时间复杂度和最坏时间复杂度

平均时间复杂度:所有可能性的平均情况
最坏时间复杂度:最坏的情况下的时间复杂度,通常情况下都是讨论的最坏时间复杂度

空间复杂度

算法在运行时所占用的内存
通常情况下都是讨论时间复杂度