Complejidad de los poderes de la matriz informática

14

Estoy interesado en el cálculo de la n -ésima potencia de un n×n matriz A . Supongamos que tenemos un algoritmo para la multiplicación de matrices que se ejecuta en tiempo O(M(n)) . Entonces, uno puede calcular fácilmente An en el tiempo O(M(n)log(n)) . ¿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, Am in o(M(n)log(m)) tiempo daría un algoritmo o(logm) para exponenciación. Pero, una serie de problemas interesantes se reducen al caso especial de exponenciación de matrices donde m = O(n) , y no pude demostrar lo mismo sobre este problema más simple.

Shitikanth
fuente
¿Cuáles son las entradas de la matriz? Enteros?
Kaveh
1
Las entradas pueden, en general, ser de un semired pero puede asumir una estructura adicional si ayuda.
Shitikanth
No pude obtener una reducción de la multiplicación a la cuadratura del método propuesto anteriormente (es decir, usando ). Sin embargo, usar ( 0 A B 0 ) 2 funciona. Sin embargo, esto solo da un Ω ( M ( n ) ) al calcular A n . (A±B)2(0AB0)2Ω(M(n))An
Shitikanth

Respuestas:

11

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

O(D(n)+nlogn)
D(n)A

Solo para completar los detalles, si con una diagonal D , entonces A n = ( P - 1 D P ) n = P - 1 D n PA=P1DPD

An=(P1DP)n=P1DnP

y puede calcularse con sólo tomar cada elemento de la diagonal (cada valor propio de A ) a la n ésima potencia.DnAn

Sonó.
fuente
66
Incluso si la matriz es diagonalizable, los algoritmos más conocidos para la descomposición propia toman tiempo . Usando el algoritmo Coppersmith-Winograd, ya tenemos un algoritmo O ( n 2.3727 log ( m ) ) para calcular A m . O(n3)O(n2.3727log(m))Am
Shitikanth
1
(1) El tiempo límite que usted cita no es por Coppersmith-Winograd (como probablemente ya sepa). (2) Todos los algoritmos de esa forma solo funcionan para anillos; no funcionan para semirremolques generales (como permites en tu pregunta).
Ryan Williams
5

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×nAA=UΣUTΣO(n3)Am=UΣmUTO(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×UTO(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)

PKG
fuente
O(n2.3727)O(n2.3727log(m))Amm=O(n)
1
A=UΣUVU
Suresh
1
It's a bit misleading to have n for the power as well, so I'll use m. If n=1 it should take O(METRO(1)Iniciar sesiónmetro hora de encontrar UNmetro, que es equivalente a multiplicar enteros
PKG
2
@Shitikanth ver ccrwest.org/gordon/jalg.pdf para una encuesta de algoritmos de exponenciación rápida. En general, no es posible usar menos deIniciar sesiónmetromultiplicaciones
Joe
1
Esto no estaba claro en su pregunta, como se dijo.
PKG