算法效率分析


参考  第二章  算法效率分析基础


2.1  分析框架

输入规模,运行时间,增长次数,最优最差平均效率


2.2  基本符号和效率类型

一张图,注意一般的效率类型都是什么情况

2011060812345658.jpg



2.3  非递归算法的效率分析


很直观--

找到基本操作

建立基本操作执行次数的求和表达式



2.4  递归算法的效率分析


不那么直观,得看递归的深度

对算法基本操作的执行次数,建立一个递推关系式以及相应的初试条件

解递推关系式(跟高中数列的递推关系式差不多)

举了2个例子,

阶乘递归实现---基本操作的递推关系式

汉诺塔---基本操作的递推关系式

很重要!一定要会建立递推关系式和解递推关系式



2.5  一个例子  斐波那契数列

定义就不用详细说了:

2011060812473043.jpg

由这个式子:

2011060812484125.jpg
根据数学知识,解特征方程可以直接得到第n个斐波那契数:

2011060812500693.jpg


其实我都忘了怎么解特征方程什么的,但大概还记得是那么回事。介绍了这么多高数里面的东西,主要是要说明,这个有2个好处:

1)它快速的告诉了我们斐波拉契数的增长速度,是呈指数增长的!!!

2)由F(n)的表达式可以知道,被减去的那一部分在0到-1之间,事实上,对任意n,

2011060812551348.jpg


有了上面这些,相信对斐波拉契数列应该有了更深一步的认识。

归于正题,在计算机中怎么去求第n个斐波拉契数,最直接的办法也许会写成这样:

2011060812575536.jpg

没有任何优化,直接根据递归的定义把上面都交给了计算机。

这里存在着大量的重复计算!!!!

这个例子可以很好的说明动态规划的思想,事实上,只需要记录连续2个f的值就可以迭代的求到F(n),它的复杂度是线性的。




总结:

1)表2.2  常见的时间复杂度一般是怎么产生的

2)非递归和递归的效率分析,递归算法的复杂度是通过递推的关系式的建立来解出来的

3)斐波拉契数列的特征,优化来获得线性的时间复杂度


转载于:https://www.cnblogs.com/jmzz/archive/2011/06/08/2075074.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值