【问题标题】:Fibonacci Sequence - Time Complexity斐波那契数列 - 时间复杂度
【发布时间】:2015-03-15 14:08:19
【问题描述】:

假设 n>1 时 fib(n)=fib(n-1)+fib(n-2) 并且 fib(0)=a, fib(1)=b (一些 a, b >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)

解决我得到的斐​​波那契数列:

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

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

【问题讨论】:

    标签: time-complexity


    【解决方案1】:

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

    fib(n) = Θ(φ^n)

    其中 φ = (1 + sqrt 5) / 2 又名golden ratio constant

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

    最后,正确答案是:

    b,f

    【讨论】:

      【解决方案2】:

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

      如果我们递归地计算 fib(n-1) 和 fib(n-2),复杂度是 exponential,但如果我们保存最后两个值并使用它们,复杂度是 O(n),而不取决于和 b.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多