Ich bin daran interessiert, die -te Potenz einer Matrix berechnen . Angenommen, wir haben einen Algorithmus für die Matrixmultiplikation, der in läuft . Dann kann man leicht in Zeit berechnen . Kann dieses Problem in kürzerer Zeit gelöst werden?
Matrixeinträge können im Allgemeinen aus einem Semiring stammen, Sie können jedoch eine zusätzliche Struktur annehmen, wenn dies hilfreich ist.
Anmerkung: Ich verstehe, dass im Allgemeinen das Berechnen von in der Zeit einen Algorithmus für die Exponentiation ergeben würde. Einige interessante Probleme beschränken sich jedoch auf den Sonderfall der Matrixexponentiation mit m = , und ich konnte dies bei diesem einfacheren Problem nicht beweisen.
Antworten:
Wenn die Matrix diagonalisierbar ist, kann die te Potenz in der Zeit O ( D ( n ) + n log n ) genommen werden, wobei D ( n ) die Zeit zur Diagonalisierung von A ist .n
Nur um die Details zu vervollständigen, wenn mit einem Diagonale D , dann A n = ( P - 1 D P ) n = P - 1 D n PA=P−1DP D
und kann berechnet werden, indem einfach jedes Element der Diagonale (jeder Eigenwert von A ) zur n- ten Potenz genommen wird.Dn A n
quelle
Ein guter Ausweg ist Singular Value Decomposition SVD . Bei einer reellen Matrix A mit vollem Rang teilt die SVD sie in der Zeit O ( n 3 ) in A = U Σ U T auf, wobei Σ eine diagonale Matrix ist . Aufgrund der Eigenschaften von SVD gilt A m = U Σ m U T , sodass nur die Diagonalmatrix potenziert werden muss und dies in O ( n log m ) erfolgen kann.n×n A A=UΣUT Σ O(n3) Am=UΣmUT O(nlogm) U×Σm×UT O(n2.3727) O(n3+nlogm)
quelle