【问题标题】:Dynamic Programming Fibonacci algorithm动态规划斐波那契算法
【发布时间】:2012-07-13 17:46:38
【问题描述】:

我正在研究一种算法来计算斐波那契数并得到它的伪代码,但我不知道运行需要多少时间。我认为它以 O(n) 运行,但不太确定。 代码如下:

Algorithm Fast-Fibonacci(n)
Let fib[0] and fib[1] be 1.
for each i from 2 to n, do:
    Let fib[i] be fib[i - 2] + fib[i - 1].
end of loop
return fib[n].

感谢您的帮助。

【问题讨论】:

    标签: algorithm time-complexity


    【解决方案1】:

    你是正确的,这需要 O(n) 因为你只是从 2 到 n 顺序计数来填充你的数组。如果您对 i-1 和 i-2 数字中的每一个都进行某种查找,这可能会增加复杂性,但按照您编写它的方式,您正在为每个值调用一个直接地址。

    【讨论】:

      【解决方案2】:

      是的。最大的收获是每个循环的操作数量是恒定的,并且循环的大小与 n 的大小成线性关系。

      但是,存在一种更节省空间的解决方案,因为您不会特别关心除最后两个之外的任何数字。下次试试!

      【讨论】:

        【解决方案3】:

        找到第 n 个斐波那契的迭代解决方案在 n 的值方面需要 O(n),在 n 的大小方面需要 O(2^length(n)) (length(n) == 要的位数代表 n)。这种运行时间称为伪多项式。但是,如果使用递归方法来找到 n 的 fib,那么就值而言,它将花费指数时间 (O(2^n))。但这可以通过使用动态规划方法来解决 n 的 fib 来减少。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-16
          • 1970-01-01
          • 2019-02-20
          • 2020-07-16
          • 2016-08-07
          • 1970-01-01
          • 2012-09-06
          • 2019-06-30
          相关资源
          最近更新 更多