Obwohl ich bereits etwas über die asymptotischen Laufzeiten von Matrixmultiplikationsalgorithmen (Strassens Algorithmus und ähnliche Dinge) gelernt habe, habe ich nie einen expliziten und zufriedenstellenden Hinweis auf ein Berechnungsmodell gefunden, mit dem diese Komplexität gemessen wird. Tatsächlich habe ich drei mögliche Antworten gefunden, von denen mir keine als absolut zufriedenstellend erscheint:
- Wikipedia sagt, dass das hier verwendete Modell die Multitape Turing Machine ist. Dies scheint mir nicht sehr sinnvoll zu sein, da bei der Analyse der Matrixmultiplikation die Skalarmultiplikation eine konstante zeitliche Komplexität haben soll. Dies ist bei Turingmaschinen nicht der Fall.
- Einige Texte beschreiben die Komplexität nur vage als die Anzahl der verwendeten arithmetischen Operationen. Was genau sind arithmetische Operationen in diesem Zusammenhang? Ich nehme an, dass Addition, Multiplikation und wahrscheinlich Subtraktion. Aber was ist mit Division, Integer Division, Rest usw.? Und was ist mit bitweisen Operationen - wie passen sie in diese Einstellung?
- Schließlich habe ich kürzlich einen Artikel entdeckt, der die BSS-Maschine als Berechnungsmodell verwendet. Dies erscheint mir jedoch auch etwas seltsam, da es für z. B. ganzzahlige Matrizen für mich wenig sinnvoll ist, Operationen wie z. B. ganzzahlige Division nicht zuzulassen.
Ich wäre jedem dankbar, der mir helfen könnte, diese Dinge zu klären.
Antworten:
Matrixmultiplikationsalgorithmen werden hinsichtlich ihrer arithmetischen Komplexität analysiert . Das Berechnungsmodell besteht aus linearen Programmen mit Anweisungen des Formularsa ← b ∘ c , wo ∘ ∈ { + , - , × , ÷ } , ein ist eine Variable und b , c können entweder Variablen, Eingaben oder Konstanten sein. Zusätzlich werden bestimmte Variablen als Ausgaben unterschieden . Hier erfahren Sie beispielsweise, wie Sie zwei multiplizieren2 × 2 Matrizen unter Verwendung des üblichen Algorithmus mit Eingabematrizen eini j,bi j und Ausgabematrix ci j ::
Für die Matrixmultiplikation kann man für alle Algorithmen eine Normalform beweisen . Jeder Algorithmus kann auf Kosten einer konstanten multiplikativen Zunahme der Komplexität in einen Algorithmus der folgenden Form umgewandelt werden:
Dies ist als bilineare Normalform bekannt . In dem oben gezeigten Matrixmultiplikationsalgorithmusxj k,yj k Funktion als γich , aber in Strassens Algorithmus sind die linearen Kombinationen interessanter; Sie sind dieM.ich ist in der Beschreibung von Wikipedia .
Unter Verwendung eines Tensoring-Ansatzes (dh rekursiver Anwendung desselben Algorithmus), ähnlich der asymptotischen Analyse des Strassen-Algorithmus, kann gezeigt werden, dass ein solcher Algorithmus zum Multiplizieren gegeben istn × n Matrix mit r Produkte (dh r Variablen γich ), dann beliebig N.× N. Matrizen können in ihrer Komplexität multipliziert werden O (N.Lognr) ;; daher ist nur die Anzahl der Produkte asymptotisch von Bedeutung. In Straßens Algorithmusn = 2 und r = 7 und so ist die Grenze O (N.Log27) .
Das Problem, die minimale Anzahl von Produkten zu finden, die zur Berechnung der Matrixmultiplikation benötigt werden, kann so formuliert werden, dass der Rang eines Tensors dritter Ordnung (eine "Matrix" mit drei statt zwei Indizes) ermittelt wird, und dies bildet die Verbindung zur algebraischen Komplexitätstheorie. Weitere Informationen finden Sie in diesem Buch oder in diesen Vorlesungsunterlagen (Fortsetzung hier ).
Es gibt zwei Gründe, warum dieses Modell verwendet wird: Erstens ist es sehr einfach und für Analysen zugänglich. Zweitens ist es eng mit dem allgemeineren RAM-Modell verwandt.
Im RAM-Modell können geradlinige Programme implementiert werden, und die Komplexität in beiden Modellen hängt stark zusammen: Arithmetische Operationen haben in mehreren Varianten des Modells (z. B. dem RAM-Modell mit reellen Zahlen) Stückkosten und sind ansonsten polynomisch miteinander verbunden auf die Größe der Zahlen. Im Fall der modularen Matrixmultiplikation liefert die arithmetische Komplexität daher eine Obergrenze für die Komplexität im RAM-Modell. Im Fall einer ganzzahligen oder rationalen Matrixmultiplikation kann man zeigen, dass bei bilinearen Algorithmen, die aus der Tensorisierung resultieren, die Größe der Zahlen nicht zu stark zunimmt und die arithmetische Komplexität eine Obergrenze für das RAM-Modell bis hin zu logarithmischen Faktoren liefert .
Es könnte a priori der Fall sein, dass eine RAM-Maschine einige Tricks ausführen kann, die das arithmetische Modell nicht kennt. Oft möchten wir jedoch, dass Matrixmultiplikationsalgorithmen für Matrizen über beliebige Felder (oder sogar Ringe) funktionieren, und in diesem Fall sollte ein einheitlicher Algorithmus nur die vom Modell angegebenen arithmetischen Operationen verwenden. Dieses Modell ist also eine Formalisierung "feldunabhängiger" Algorithmen.
quelle