Lo más simple y fácil de hacer: Multiplicación matricial.
Por qué ?
Porque se usa para resolver fórmulas recursivas muy muy rápido.
Tomemos una serie simple de Fibonacci cuya fórmula recursiva es:
Fib (n) = Fib (n-1) + Fib (n-2)
La programación dinámica se usa generalmente para esto. Eso lo resuelve en O (n).
- Mientras hacemos agrupaciones espectrales, ¿por qué encontramos el vector propio del gráfico laplaciano? ¿Por qué no usar la matriz de adyacencia directamente?
- Álgebra lineal: ¿Cuál es una explicación intuitiva de la desigualdad de Cauchy-Schwarz?
- Álgebra lineal: ¿Cuál es la información expuesta por el vector de valores propios en una matriz gráfica basada en la distancia?
- ¿Qué representan los vectores singulares y cómo se comparan con los vectores propios de la matriz de covarianza?
- ¿Cómo es tomar Math 217 (Álgebra lineal de honores) en Princeton?
Pero con la multiplicación matricial repetida podemos resolverlo en O (log (n) * matrix_size ^ 3)
dado que el tamaño de la matriz es pequeño, lo cual es generalmente, para n grande, es un gran método.
El problema es cómo crear una matriz cuya cuadratura repetida hasta la enésima potencia nos dé el enésimo número de Fibonacci.
Vamos a crear una matriz de 2 * 2,
Matriz A =
El | F_ (n-2) F_ (n-3) |
El | F_ (n-1) F_ (n-2) |
Matriz B =
El | 1 1 |
El | 1 0 |
Matriz A * B = C
El | F_ (n-1) F_ (n-2) |
El | F_ (n) F_ (n-1) |
Ahora mira de cerca a A y C
Cada valor de x en F_ (x) en A se incrementa en 1 en C.
Entonces, C * B = D daría su matriz [1] [0] como (n + 1) th elemento de Fibonacci.
Si partimos de la matriz básica A: para n = 3
El | 1 1 |
El | 2 1 |
A * B = C daría en C [1] [0] = 3.
C * B = D daría en D [1] [0] = 5.
entonces A * B ^ (n-3) daría el enésimo número de Fibonacci en la posición [1] [0].
B ^ (n-3) se puede calcular en tiempo O (log (n)). 🙂