首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fibonacci序列-时间复杂度

Fibonacci序列-时间复杂度
EN

Stack Overflow用户
提问于 2015-03-15 14:08:19
回答 2查看 287关注 0票数 2

给出了n>1的fib(n)=fib(n-1)+fib(n-2),并给出了fib(0)=a,fib(1)=b ( a,b >0),下面哪个是正确的?

代码语言:javascript
复制
fib(n) is 

Select one or more:
a. O(n^2)
b. O(2^n)
c. O((1-sqrt 5)/2)^n)
d. O(n)
e. Answer depends on a and b.
f. O((1+sqrt 5)/2)^n)

解决斐波纳契序列我知道:

代码语言:javascript
复制
fib(n)= 1/(sqrt 5) ((1+sqrt 5)/2)^n - 1/(sqrt 5) ((1-sqrt 5)/2)^n

但是,在这种情况下,时间的复杂性是什么呢?这是否意味着答案是c和f?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-15 14:57:44

从公式的封闭形式来看,当1 / (sqrt 5) ((1 - sqrt 5) / 2)^n增长到无穷大(|(1 - sqrt 5) / 2| < 1)时,术语n限制了0。因此,我们可以忽略这一术语。此外,在时间复杂性理论中,我们不关心乘法常数,以下是正确的:

fib(n) =Θ(φ^n)

其中φ= (1 + sqrt 5) / 2 a.k.a.黄金比常数

这是一个指数函数,我们可以排除a, d, e。我们可以排除c,因为有人说它限制了0。但是答案b也是正确的,因为φ < 2O表示一个上限。

最后,正确的答案是:

b,f

票数 3
EN

Stack Overflow用户

发布于 2016-02-14 13:58:38

a=1 and b=1a=1 and b=2时,Θ(φ^n)是正确的。The value of φ depends on a and b

对于计算fib(n-1)和fib(n-2),如果递归计算它们的复杂度是exponential,但是如果我们保存最后两个值并使用它们,则复杂度是O(n),而不是依赖于a和b。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29061541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档