Complexité des puissances de la matrice de calcul

14

Je suis intéressé par le calcul de la n ième puissance d'un la matrice . Supposons que nous ayons un algorithme de multiplication matricielle qui s'exécute en temps . Ensuite, on peut facilement calculer en temps. Est-il possible de résoudre ce problème en moins de temps?n×nAO(M(n))AnO(M(n)log(n))

Les entrées de matrice peuvent, en général, provenir d'un semiring mais vous pouvez assumer une structure supplémentaire si cela vous aide.

Remarque: Je comprends qu'en calculant en temps donnerait un algorithme pour l'exponentiation. Mais, un certain nombre de problèmes intéressants se réduisent au cas particulier de l'exponentiation matricielle où m = , et je n'ai pas pu prouver la même chose à propos de ce problème plus simple.Amo(M(n)log(m))o(logm)O(n)

Shitikanth
la source
quelles sont les entrées de la matrice? Entiers?
Kaveh
1
Les entrées peuvent, en général, provenir d'un semiring mais vous pouvez assumer une structure supplémentaire si cela vous aide.
Shitikanth
Je n'ai pas pu obtenir une réduction de la multiplication à la quadrature de la méthode proposée ci-dessus (c'est-à-dire en utilisant ). Cependant, utiliser fonctionne. Cependant, cela ne donne qu'un sur le calcul de . (A±B)2(0AB0)2Ω(M(n))An
Shitikanth

Réponses:

11

Si la matrice est diagonalisable, la prise de la ème puissance peut se faire dans le temps O ( D ( n ) + n log n )n

O(D(n)+nlogn)
est le temps de diagonaliser A .D(n)A

Pour compléter les détails, si avec une diagonale D , alors A n = ( P - 1 D P ) n =A=P1DPD

An=(P1DP)n=P1DnP

et peut être calculé en prenant simplement chaque élément de la diagonale (chaque valeur propre deDn ) à la n e puissance.An

A sonné.
la source
6
Même si la matrice est diagonalisable, les algorithmes les plus connus pour la composition par eigend prennent du temps . En utilisant l'algorithme Coppersmith-Winograd, nous avons déjà un algorithme O ( n 2.3727 log ( m ) ) pour calculer A m . O(n3)O(n2.3727log(m))Am
Shitikanth
1
(1) Le temps que vous citez n'est pas celui de Coppersmith-Winograd (comme vous le savez probablement). (2) Tous les algorithmes de cette forme ne fonctionnent que pour les anneaux; ils ne fonctionnent pas pour les semirings généraux (comme vous le permettez dans votre question).
Ryan Williams
5

Une bonne solution est la SVD de décomposition en valeurs singulières . Étant donné une matrice réelle A de rang complet , SVD la sépare en A = U Σ U TΣ est une matrice diagonale, dans le temps O ( n 3 ) . Par les propriétés de SVD, A m = U Σ m U T , donc seule la matrice diagonale doit être exponentiée, et cela peut être fait en O ( n log m )n×nAA=UΣUTΣO(n3)Am=UΣmUTO(nlogm) temps de . Réalisation de la multiplication finale prend O ( n 2,3727 ) , donc nous avons tout à fait O ( n 3 + n logU×Σm×UTO(n2.3727) opérations. O(n3+nlogm)

Mise à jour après commentaire Le fait est qu'une fois le SVD trouvé, toute puissance ne prend que pour calculer par votre propre algorithme CW. Mais ce n'est pas votre question: s'il y avait vraiment un algorithme o ( M ( n ) log ( m ) ) , il se convertirait immédiatement en o ( log n )O(n2.3727+nlogm)o(M(n)log(m))o(logn) algorithme pour les entiers. Je soupçonne qu'un tel n'existe pas.

PKG
la source
Puisque l'algorithme de Coppersmith – Winograd trouve le produit de deux matrices en temps , nous avons déjà un algorithme O ( n 2.3727 log ( m ) ) pour calculer A m . Je suis intéressé à savoir si cela peut être amélioré sans nécessiter un meilleur algorithme de multiplication matricielle, en particulier pour m = O ( n ) . O(n2.3727)O(n2.3727log(m))Amm=O(n)
Shitikanth
1
la SVD ne donne pas en général - la matrice de droite est V U A=UΣUVU
Suresh
1
C'est un peu trompeur d'avoir pour la puissance aussi, donc je vais utiliser m . Si n = 1, il faut O ( M ( 1 ) log m temps pour trouver A m , ce qui équivaut à multiplier des entiersnmn=1O(M(1)logmAm
PKG
2
logm
1
Cela n'était pas clair à partir de votre question, comme indiqué.
PKG