算法的时间和空间复杂度
- 复杂度的引入
为了衡量算法的执行效率以及所占空间大小,我们引入了时间和空间复杂度,完美的解决了这个问题
2.时间复杂度
2.1 时间复杂度的概念
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。
2.2 大O渐进法
大O符号(Big O notation):是用于描述函数渐进行为的数学符号
推导大O阶方法:
1》用常数1取代运行时间中的所有加法常数。
2》在修改后的运行次数函数中,只保留最高阶项。
3》如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶
2.3 时间复杂度下的各种情况
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)
但是时间复杂度考虑的一般是最坏情况下的结果
2.4 各种类型时间复杂度的值
1》
上述情况我们可以看到其的时间复杂度应为2N +10,应用大O渐进法,上述实例的时间复杂度应为O(N);
2》应用时间复杂度概念,上述式子运行次数应为M+N次,即其时间复杂度为P(M+N)
3》冒泡排序时间复杂度
从式子中可以看出。冒泡排序运算次数应为哦(n^2);
4》二分查找时间复杂度
二分查找的时间复杂度应该为以2为底的n的对数
5》递归的时间复杂度
由上可以看出递归的时间复杂度应该为O(N)
6》斐波那契数列的时间复杂度
3.空间复杂度
3.1.概念
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes
的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度
类似,也使用大O渐进表示法
3.2 冒泡排序法的空间复杂度
从上面的式子可以看出冒泡排序使用的常数空间为常数个,所以他的空间复杂度应该为O(1);
3.3 斐波那契数的空间复杂度
从图中看出来,斐波那契数所申请的额外空间数应该为N个,所以其空间复杂度为O(N);
3.4 递归的时间复杂度
从图中看出来,递归所申请的额外空间数应该为N个,所以其空间复杂度为O(N);