1. 基本概念
大O记法,用以确定函数的上限; 表示两个量之间的不大于关系
Ω记法,用以确定函数的下限;表示两个量之间的不小于关系
Θ记法,确定两个函数相等;表示两个量之间的相等关系
小o记法用以表示两个函数之间只存在小于关系;
注意:在大O表示法中,各种简化发生是常见的现象,低阶项一般被忽略,常数项会被丢弃。
2. 评价方法
我们可以通过极限来评判两个量的相对增长率:
当极限为0时,意味着大O记法;当极限不等于0时,意味着Ω记法;当极限为oo时,意味着小o记法
常见的几种函数的增长率对比:
对算法最坏性能的分析代表了程序应对任何输入可能的一种保证,而对算法平均性能的分析则代表了算法运行的典型结果,通常很少去分析算法的最好运行性能。
对于一些运行高效的算法,其瓶颈一般出现在数据读入;算法真正用于解决问题运行的时间只是很小一部分,数据一旦读入,算法将很快解决。
3. 算法运行时间测算的一般法则
for循环:循环内语句的运行时间 × 迭代次数
嵌套for循环:内存循环语句运行时间 × 所有外层循环大小
顺序语句:各语句运行时间求和
if/else语句:不超过判断语句 + 耗时较长分支的运行时间
有方法调用:分析方法调用耗时
递归:注意分析其for的简单变体还是其他更复杂的形式
//复杂度为O(N)的斐波那契数列计算
long fab(int n)
{
if n = 1;
return 1;
else
return n * fab(n - 1);
}
//频繁函数调用的计算方式,该方式存在大量无效的计算,效率极低
long fab(int n)
{
if n <= 1;
return 1;
else
return fab(n - 1) * fab(n - 2);
}
更多精彩内容,欢迎关注本人微信公众号: