我正在研究一种计算Fibonacci数的算法,并得到了它的伪代码,但我无法弄清楚运行需要多少时间。我认为它在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].
感谢您的帮助。
答案 0 :(得分:2)
你是正确的,这需要O(n),因为你只是从2到n依次计数来填充你的数组。如果你正在为每个i-1和i-2数字进行某种查找,这可能会增加复杂性,但是你编写它的方式,就是为每个数字调用一个直接地址。
答案 1 :(得分:2)
是的。最大的赠品是每个循环的操作数量恒定,循环的大小与n的大小呈线性关系。
然而,存在更节省空间的解决方案,因为除了最后两个之外,您并不特别关心任何数字。试试下一个!
答案 2 :(得分:1)
找到第n个斐波那契的迭代解决方案以n的值表示O(n),以n的大小表示O(2 ^ length(n))(长度(n)==位数代表n)。这种运行时间称为伪多项式。但是,如果使用递归方法来查找n的fib,则它将花费的时间为指数值(O(2 ^ n))。但这可以通过使用动态编程方法来解决n的fib来减少。