斐波那契数列算法分析报告

斐波那契数列算法分析报告

ID:37409937

大小:100.00 KB

页数:8页

时间:2019-05-23

斐波那契数列算法分析报告_第1页
斐波那契数列算法分析报告_第2页
斐波那契数列算法分析报告_第3页
斐波那契数列算法分析报告_第4页
斐波那契数列算法分析报告_第5页
资源描述:

《斐波那契数列算法分析报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实用文案斐波那契数列算法分析背景:假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去。每只雌兔在开始繁殖时每月都产下一对兔子,假定没有兔子死亡,在一年后总共会有多少对兔子?在一月底,最初的一对兔子交配,但是还只有1对兔子;在二月底,雌兔产下一对兔子,共有2对兔子;在三月底,最老的雌兔产下第二对兔子,共有3对兔子;在四月底,最老的雌兔产下第三对兔子,两个月前生的雌兔产下一对兔子,共有5对兔子;……如此这般计算下去,兔子对数分别是:1,1,2,3

2、,5,8,13,21,34,55,89,144,...看出规律了吗?从第3个数目开始,每个数目都是前面两个数目之和。这就是著名的斐波那契(Fibonacci)数列。 有趣问题:1,有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?答:这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种方法……所以,1,2,3,5,8,13……登上十级,有89种。2,数列中相邻两项的前项比后项的极限是多少,就是问,当n趋于无穷大时,F(n)/F(n+

3、1)的极限是多少?答:这个可由它的通项公式直接得到,极限是(-1+√5)/2,这个就是所谓的黄金分割点,也是代表大自然的和谐的一个数字。 数学表示:Fibonacci数列的数学表达式就是:F(n)=F(n-1)+F(n-2)F(1)=1F(2)=1 递归程序1:Fibonacci数列可以用很直观的二叉递归程序来写,用C++语言的描述如下:longfib1(intn){if(n<=2){return1;}else{returnfib1(n-1)+fib1(n-2);}}标准文档实用文案看上去程序的递归使用很恰当,可是在用VC2005的环境下

4、测试n=37的时候用了大约3s,而n=45的时候基本下楼打完饭也看不到结果……显然这种递归的效率太低了!!递归效率分析:例如,用下面一个测试函数:longfib1(intn,int*arr){arr[n]++;if(n<=2){return1;}else{returnfib1(n-1,arr)+fib1(n-2,arr);}}这时,可以得到每个fib(i)被计算的次数:fib(10)=1fib(9)=1fib(8)=2fib(7)=3fib(6)=5fib(5)=8fib(4)=13fib(3)=21fib(2)=34fib(1)=55f

5、ib(0)=34可见,计算次数呈反向的Fibonacci数列,这显然造成了大量重复计算。我们令T(N)为函数fib(n)的运行时间,当N>=2的时候我们分析可知:T(N)=T(N-1)+T(N-2)+2而fib(n)=fib(n-1)+fib(n-2),所以有T(N)>=fib(n),归纳法证明可得:fib(N)<(5/3)^N当N>4时,fib(N)>=(3/2)^N标准写法:显然这个O((3/2)^N)是以指数增长的算法,基本上是最坏的情况。其实,这违反了递归的一个规则:合成效益法则。合成效益法则(Compoundinterestru

6、le):在求解一个问题的同一实例的时候,切勿在不同的递归调用中做重复性的工作。所以在上面的代码中调用fib(N-1)的时候实际上同时计算了fib(N-2)。这种小的重复计算在递归过程中就会产生巨大的运行时间。 递归程序2:用一叉递归程序就可以得到近似线性的效率,用C++语言的描述如下:标准文档实用文案longfib(intn,longa,longb,intcount){if(count==n)returnb;returnfib(n,b,a+b,++count);} longfib2(intn){returnfib(n,0,1,1);}这种

7、方法虽然是递归了,但是并不直观,而且效率上相比下面的迭代循环并没有优势。 迭代解法:Fibonacci数列用迭代程序来写也很容易,用C++语言的描述如下://也可以用数组将每次计算的f(n)存储下来,用来下次计算用(空间换时间)longfib3(intn){longx=0,y=1;for(intj=1;j

8、ibonacci[n-1]+Fibonacci[n-2](n>=2)可以将它写成矩阵乘法形式:将右边连续的展开就得到:标准文档实用文案下面就是要用O(log(n))的算法计算:显然用二分法来求

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。