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?
答案 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
也是正确的,因为φ < 2
和O
表达了上限。
最后,正确的答案是:
b,f
答案 1 :(得分:1)
a=1 and b=1
或a=1 and b=2
时,Θ(φ^ n)是正确的。 The value of φ depends on a and b
。
对于计算fib(n-1)和fib(n-2),如果我们递归计算它们的复杂度为exponential
,但如果我们保存两个最后的值并使用它们,则复杂性为O(n)
并且不取决于a和b。