Estoy interesado en el cálculo de la -ésima potencia de un matriz . Supongamos que tenemos un algoritmo para la multiplicación de matrices que se ejecuta en tiempo . Entonces, uno puede calcular fácilmente en el tiempo . ¿Es posible resolver este problema en menor complejidad de tiempo?
Las entradas de matriz pueden, en general, ser de un semired pero puede asumir una estructura adicional si ayuda.
Nota: Entiendo que en la computación general, in tiempo daría un algoritmo para exponenciación. Pero, una serie de problemas interesantes se reducen al caso especial de exponenciación de matrices donde m = , y no pude demostrar lo mismo sobre este problema más simple.
Respuestas:
Si la matriz es diagonalizable entonces tomando el ésima potencia se puede hacer en tiempo O ( D ( n ) + n log n ) , donde D ( n ) es el tiempo para diagonalizar A .n
Solo para completar los detalles, si con una diagonal D , entonces A n = ( P - 1 D P ) n = P - 1 D n PA=P−1DP D
y puede calcularse con sólo tomar cada elemento de la diagonal (cada valor propio de A ) a la n ésima potencia.Dn A n
fuente
Una buena salida es la SVD de descomposición del valor singular . Dada una matriz real A de rango completo , SVD la divide como A = U Σ U T donde Σ es una matriz diagonal, en el tiempo O ( n 3 ) . Por las propiedades de SVD, A m = U Σ m U T , por lo que solo la matriz diagonal necesita ser exponencial, y esto se puede hacer en O ( n log m )n×n A A=UΣUT Σ O(n3) Am=UΣmUT O(nlogm) hora. Realizar la multiplicación final toma O ( n 2.3727 ) , por lo que tenemos operaciones O ( n 3 + n log m ) . U×Σm×UT O(n2.3727) O(n3+nlogm)
Actualización después del comentario El punto es que una vez que se encuentra el SVD, cualquier potencia toma solo tiempo para calcular mediante su propio algoritmo CW. Pero esta no es su pregunta. Si realmente hubiera un algoritmo o ( M ( n ) log ( m ) ) , se convertiría inmediatamente en un algoritmo o ( log n ) para enteros. Sospecho que uno de esos no existe.O(n2.3727+nlogm) o(M(n)log(m)) o(logn)
fuente