Je suis intéressé par le calcul de la 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?
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.
Réponses:
Si la matrice est diagonalisable, la prise de la ème puissance peut se faire dans le temps O ( D ( n ) + n log n ) oùn
Pour compléter les détails, si avec une diagonale D , alors A n = ( P - 1 D P ) n =A=P−1DP D
et peut être calculé en prenant simplement chaque élément de la diagonale (chaque valeur propre deDn ) à la n e puissance.A n
la source
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 où Σ 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×n A A=UΣUT Σ O(n3) Am=UΣmUT O(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×UT O(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.
la source