在log n时间内解决斐波那契像复发一样

时间:2011-10-07 10:45:24

标签: algorithm math

在Fibonacci系列中找到第n个术语 f(n)= f(n-1)+ f(n-2)可以通过记忆在O(n)时间内求解。

更有效的方法是使用除法和征服来找到矩阵[[1,1],[1,0]]的n次幂,以便在log n时间内解决Fibonacci。

是否有类似的方法可以遵循 f(n)= f(n-1)+ f(n-x)+ f(n-x + 1)[x是某个常数]。

只需存储前面的x个元素,就可以在O(n)时间内解决。

有没有更好的方法来解决这种递归问题。

2 个答案:

答案 0 :(得分:8)

正如您已经怀疑的那样,这将非常相似。使用x * x矩阵的第n个幂

|1 0 0 0  .... 1 1|
|1 
|  1
|    1
|      1
|        1
...................
...................
|          ... 1 0|

如果将此矩阵与向量

相乘,这很容易理解
f(n-1), f(n-2), ... , f(n-x+1), f(n-x)

导致

f(n), f(n-1), ... , f(n-x+1)

矩阵取幂可以在O(log(n))时间内完成(当x被认为是常数时)。

对于Fibonacci重复,还有一个封闭的公式解决方案,请参阅此处http://en.wikipedia.org/wiki/Fibonacci_number,查找Binet或Moivre公式。

答案 1 :(得分:2)

您可能需要查看Tribonacci数字(以及Fibonacci数的其他推广。)它们已被广泛研究。参见例如Generalizations of Fibonacci numbers