斐波纳契数列 - 时间复杂度

时间:2015-03-15 14:08:20

标签: time-complexity

考虑到对于n> 1,fib(n)= fib(n-1)+ fib(n-2)并且给定fib(0)= a,fib(1)= b(一些a,b> 1)。 0),以下哪一项是正确的?

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)

解决Fibonacci序列我得到了:

fib(n)= 1/(sqrt 5) ((1+sqrt 5)/2)^n - 1/(sqrt 5) ((1-sqrt 5)/2)^n

但在这种情况下,时间复杂度会是多少?这是否意味着答案是c和f?

2 个答案:

答案 0 :(得分:3)

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

  

fib(n)=Θ(φ^ n)

其中φ= (1 + sqrt 5) / 2 a.k.a。golden ratio constant

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

最后,正确的答案是:

  

b,f

答案 1 :(得分:1)

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。