斐波那契数列时间复杂性的近似证明和精确证明(转)
2013-09-29 01:07
239 查看
斐波那契数列可以派生出很多应用,其中,我们知道它的时间复杂性是指数级的,现在就来粗略地证明一下:
斐波那契数列递推式:
F(n)=F(n-1)+F(n-2)
F(1)=F(2)=1
粗略证明可以利用Decision_Tree,为了更直观,我引用另一个恒等函数 f(x)=0 ;x=1,2,3,4,5,............
所以斐波那契数列递推式变形如下:
F(n)=F(n-1)+F(n-2)+f(n)
F(1)=F(2)=1
画出Decision_Tree
// F(n)= f(n)
// / \
// f(n-1) f(n-2)
// / \ / \
// f(n-2) f(n-3) f(n-3 f(n-4)
// . . . .
// . . . f(2)
// / \ \
// f(1) f(2) 1
// / \ /\
// 1 1 1 1
因为f(n)恒等于0,所以F(n)等于叶子结点的总和乘以Theta(1).最长链路是最左子树,最短链路是最右子树。
所以有:2^(n/2)<F(n)<2^n,即F(n)=theta(2^n).
精确证明:
斐波那契数列递推式:
F(n)=F(n-1)+F(n-2)
F(1)=F(2)=1
粗略证明可以利用Decision_Tree,为了更直观,我引用另一个恒等函数 f(x)=0 ;x=1,2,3,4,5,............
所以斐波那契数列递推式变形如下:
F(n)=F(n-1)+F(n-2)+f(n)
F(1)=F(2)=1
画出Decision_Tree
// F(n)= f(n)
// / \
// f(n-1) f(n-2)
// / \ / \
// f(n-2) f(n-3) f(n-3 f(n-4)
// . . . .
// . . . f(2)
// / \ \
// f(1) f(2) 1
// / \ /\
// 1 1 1 1
因为f(n)恒等于0,所以F(n)等于叶子结点的总和乘以Theta(1).最长链路是最左子树,最短链路是最右子树。
所以有:2^(n/2)<F(n)<2^n,即F(n)=theta(2^n).
精确证明:
相关文章推荐
- 斐波那契数列时间复杂性的近似证明和精确证明
- 精确获取时间(QueryPerformanceCounter)
- 设M 是一个m×n 的矩阵,其中每行的元素从左到右单增有序,每列的元素从上到下单增有序。 给出一个分治算法计算出给定元素x 在M 中的位置或者表明x 不在M 中。分析算法的时间复杂性。
- oracle中计算时间差,精确到时分秒
- windows操作系统之间的时间精确同步
- VC获取精确时间的做法
- C#中获取精确时间
- 快排及时间复杂度简单证明
- Windows下精确获取程序的运行时间可精确到微妙
- 写出斐波那契数列的递归与迭代代码,并分析时间和空间复杂度。
- jsp页面将时间截取精确到小时
- 在windows下计算两个时间的时间差(精确到毫秒)
- 如何得到SQL精确的执行时间
- 证明一个操作的一致性读过程是以自己开始执行的时间为准回滚的不是以该操作所在的事务开始的时间为准回滚的
- Linux平台下如何获得精确到us级别的时间
- windows下C语言获取精确到毫秒的时间的几个接口的测试
- 转:php中实现精确设置session过期时间的方法
- Fibonacci 斐波那契数列的几种写法、时间复杂度对比
- php 时间比较 减法 精确
- C++精确获取时间(QueryPerformanceCounter)