Solving a Fibonacci like recurrence in log n time

前端 未结 2 799
星月不相逢
星月不相逢 2021-01-12 01:57

Finding the nth term in Fibonacci series f(n) = f(n-1) + f(n-2) can be solved in O(n) time by memoization.

A more efficient way would be to find the nth power of mat

相关标签:
2条回答
  • 2021-01-12 02:06

    As you are already suspecting, this will work very similar. Use the n-th power of the x * x matrix

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

    This is easy to understand if you multiply this matrix with the vector

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

    which results in

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

    Matrix exponentiation can be done in O(log(n)) time (when x is considered to be constant).

    For the Fibonacci recurrence, there is also a closed formula solution, see here http://en.wikipedia.org/wiki/Fibonacci_number, look for Binet's or Moivre's formula.

    0 讨论(0)
  • 2021-01-12 02:08

    You may want to look into Tribonacci numbers (and other generalizations of Fiboniacci numbers.) They have been studied quite extensively. See e.g. Generalizations of Fibonacci numbers

    0 讨论(0)
提交回复
热议问题