Komplexität der Rechenmatrixleistungen


14

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?nn×nAO(M(n))AnO(M(n)log⁡(n))

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.Amo(M(n)log⁡(m))o(log⁡m)O(n)


Was sind die Einträge der Matrix? Ganze Zahlen?
— Kaveh

1
Die Einträge können im Allgemeinen aus einem Semiring stammen, Sie können jedoch eine zusätzliche Struktur annehmen, wenn dies hilfreich ist.
— Shitikanth

Ich konnte mit der oben vorgeschlagenen Methode (dh mit ) keine Reduktion von Multiplikation zu Quadrierung erzielen . Die Verwendung von ( 0 A B 0 ) 2 funktioniert jedoch. Doch nur das gibt einen Ω ( M ( n ) ) auf die Berechnung A n . (A±B)2(0AB0)2Ω(M(n))An
— Shitikanth

Antworten:


10

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

O(D(n)+nlog⁡n)
D(n)A

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−1DPD

An=(P−1DP)n=P−1DnP

und kann berechnet werden, indem einfach jedes Element der Diagonale (jeder Eigenwert von A ) zur n- ten Potenz genommen wird.DnAn


6
Selbst wenn die Matrix diagonalisierbar ist, benötigen die bekanntesten Algorithmen für die Neuzusammenstellung -Zeit . Unter Verwendung der Kupferschmiede-Winograd - Algorithmus, haben wir bereits ein O ( n 2,3727 log ( m ) ) Algorithmus zur Berechnung A m . O(n3)O(n2.3727log⁡(m))Am
— Shitikanth

1
(1) Die von Ihnen angegebene Zeit ist nicht von Coppersmith-Winograd (wie Sie wahrscheinlich wissen). (2) Alle Algorithmen dieser Form funktionieren nur für Ringe; Sie funktionieren nicht für allgemeine Semirings (wie Sie in Ihrer Frage zulassen).
— Ryan Williams

5

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×nAA=UΣUTΣO(n3)Am=UΣmUTO(nlog⁡m)U×Σm×UTO(n2.3727)O(n3+nlog⁡m)

O(n2.3727+nlog⁡m)o(M(n)log⁡(m))o(log⁡n)


O(n2.3727)O(n2.3727log⁡(m))Amm=O(n)

1
die SVD gibt im Allgemeinen nicht - die rechte Matrix ist V ≠ U ⊤A=UΣU⊤V≠U⊤
— Suresh

1
Es ist ein bisschen irreführend, für die Leistung zu haben , also verwende ich m . Wenn n = 1 ist , sollte O ( M ( 1 ) log m Zeit brauchen , um A m zu finden , was der Multiplikation von ganzen Zahlen entsprichtnmn=1O(M(1)log⁡mAm
— PKG

2
log⁡m

1
Wie bereits erwähnt, war dies aus Ihrer Frage nicht ersichtlich.
— PKG
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.