一、何谓时间复杂度
1、时间复杂度基本概念
算的不是时间,可根据时间复杂度判断算法属于哪个量级,是否具有实际意义
2、时间复杂度实际意义
对算法对时间的开销进行评估
3、常见复杂度阶别
二、几种情况下时间复杂度的计算
1、递归下时间复杂度计算
即递归下时间复杂度等于所有递归调用次数累加
2、计算斐波那契数列时间复杂度
每次调用内部开销为常数次,将所有调用次数相加则得时间复杂度为O(2^n)
注意:此算法实际意义不大,对时间开销太大
优化版本:递归改循环,时间复杂度O(n)
暂不考虑溢出
三、空间复杂度
常见空间复杂度:
O(1)、O(n)、O(n^2)
常数、一维数组、二维数组
思考:
递归下斐波那契数列的空间复杂度?
首先我们需要知道栈空间是可以重复利用的。
计算斐波那契数列数列时,系统并不会同时进行所有Fib()函数的计算,而是按照一定顺序进行的,这个顺序是从Fib(N)直接一直算到Fib(2),中间的其余Fib()函数并未进行计算,此时调用不同Fib()函数个数所占栈空间达到最大为n-1,之后由于Fib(2)满足if限制条件计算完毕,开始返还栈空间,这部分栈空间就被Fib(1)重复利用进行计算,然后再返还。
其余计算以此进行,所以栈空间被占到最大为n-1,空间复杂度为O(n)