【问题标题】: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 来减少。