一、如何衡量一个算法的好坏
看下面的一个代码是求斐波那契数列的算法,这个算法好不好,为什么?
二、算法效率
算法效率的分析分为两种:一种是时间效率,另一种就是空间效率。时间效率就是时间复杂度,空间效率就是空间复杂度。时间复杂度主要衡量一个算法的运行效率,而空间复杂度主要衡量一个算法所需要的一个额外空间。在计算机早期的发展中内存是很小的所以空间复杂度显得至关重要,而现如今时间复杂度显得格外重要。
三、时间复杂度
1.时间复杂度的概念
时间复杂度:不用算真实运行时间,只估算代码执行次数,用来衡量算法运行快慢,用大 O 符号O()表示。
2.大O的渐进表示法
而通过计算可以得到fucn1的执行次数为
fucn1(N)= N²+2N+10;
实际计算时间复杂度我们不需要计算执行的精确的次数,只需要计算大概的次数,用大O渐进法就够用了
3.推导大O渐进法
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
则这个fucn1 的时间复杂度是 O(N²)。
4.常见的时间复杂度计算
示例1.
示例2.
示例3.
示例4.
示例5.
示例6.
示例7.
四、空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空 间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也 使用大O渐进表示法。
示例1.
示例2.
示例3.
递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)