Recursión lineal

Definición
Las recurrencias lineales son de la forma:


 * $$f : \mathbb{Z} \rightarrow \mathbf{A}$$
 * $$f(n) = \sum_{i=k}^{n-1} a_i f(i)$$, Donde $$a_i \,$$ es un escalar.

Si, $$\mathbf{A}$$ es un conjunto cualquiera, ya que se define operaciones de suma y producto escalar. En este caso decimos que son del orden de (n-k).

Secuencia de Fibonnaci
Por ejemplo, tenemos a secuencia de Fibonacci, que puede ser definida por la siguiente recursión linear:


 * $$f(n) = f(n-1) + f(n-2) \,$$
 * $$f(0) = 1 \,$$
 * $$f(1) = 1 \,$$

Que puede ser escrita en notación matricial:



\left[ \begin{array}{c} f(n+1) \\ f(n) \end{array} \right] = \left[ \begin{array}{ccc} 1 & 1 \\ 1 & 0 \end{array} \right] \cdot \left[ \begin{array}{c} f(n) \\ f(n-1) \end{array} \right] $$

Para simplificar, vamos utilizar la siguiente notación:


 * $$F(n) = \left[ \begin{array}{c} f(n) \\ f(n-1) \end{array} \right]$$
 * $$A = \left[ \begin{array}{ccc} 1 & 1 \\ 1 & 0 \end{array} \right]$$

Así, tenemos: $$F(n+1) = A \cdot F(n)$$.

Utilizando inducion finita, facilmente probamos que:

$$F(n+1) = A^{n} \cdot F(1)$$.

Por tanto, para cálcular el n-ésimo termino de una secuencia de Fibonnaci con complejidad $$O(\log{n}) \,$$, basta utilizar Exponencial Rápida para el cálculo de $$A^n \,$$.

Generalizacion
Una recursión lineal de la forma:


 * $$f(n) = \sum_{i=k}^{n-1} a_i f(i), a_i \in \mathbb{C}$$

puede ser representada en la siguiente notacion matricial:



\left[ \begin{array}{c} f(n+1) \\ f(n) \\ \vdots \\ f(k+2) \\ f(k+1) \end{array} \right] = \left[ \begin{array}{ccccc} a_{n} & a_{n-1} & \cdots & a_{k+1} & a_{k} \\ 1 & 0 & \cdots & 0 & 0 \\ 0 & 1 & \cdots & 0 & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & \cdots & 1 & 0 \end{array} \right] \cdot \left[ \begin{array}{c} f(n) \\ f(n-1) \\ \vdots \\ f(k+1) \\ f(k) \end{array} \right] $$

De este modo, similar al exemplo con a secuencia de Fibonacci, el n-ésimo termino puede ser calculado con complejidad $$O(\log{n}) \,$$ utilizando Exponencial Rápida.