.如何衡量一个算法的好坏:时间复杂度和空间复杂度
算法效率分为时间效率和空间效率,时间效率称为时间复杂度,空间效率称为空间复杂度
时间复杂度
算法的时间复杂度是一个数学函数,它描述了算法的运行时间,一个算法执行耗费的时间,和这个算法当中语句的执行次数有关,语句执行次数越多,运行时间就多,成正比,算法中的基本操作执行次数,为算法的时间复杂度
大O的渐进表示法
找语句执行次数多的语句===找循环
例
语句执行次数:n^2+2n+10;
用N表示法表示时,只保留最高次项
时间复杂度T(n^2);
推到O阶方法
1.用常数1取代运行时间中的所有加法常数
2.再修改后的执行次数中,只保留最高阶项
3.如果最高项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是O阶
时间复杂度 分为最好情况、最坏情况、平均情况
我们一般所说的时间复杂度是最坏情况下的时间复杂度
常见时间复杂度例题
1.
语句执行次数:1+2n+1+M+1;
时间复杂度:O(n);
2.
语句执行次数:1+m+n+1;
时间复杂度:O(m+n);
3.
语句执行次数:102;
时间复杂度:O(1);
4.
语句执行次数:array.length+array.length*(array.length-1)*3+2;
时间复杂度:O(n^2);
冒泡排序法是n^2;
5.
二分查找:n/2^x=1,n=2^x,x=log2n;
时间复杂度:O(log2N);
6.
递归的时间复杂度如何运算:递归的时间复杂度=递归的次数*每次递归后执行的次数
时间复杂度:O(n);
计算时间复杂度不要只记得循环次数,要关注具体的每一个语句,进行判断
7.
F(n)=F(n-1)+F(n-2);
斐波那契递归数列的时间复杂度:
最坏情况下:遍历所有节点
O(2^n);
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量,也使用大O渐进表示法
无论是空间复杂度还是时间复杂度,我们都应该结合代码的实现去做空间复杂度和时间复杂度的计算,一些常用的复杂度大小:O(logN) < O(N) < O(N*logN) <O(n^2);