p1 := (a11 + a22) * (b11 + b22)dann gilt für das Produkt
p2 := (a21 + a22) * b11
p3 := a11 * (b12 - b22)
p4 := a22 * (b21 - b11)
p5 := (a11 + a12) * b22
p6 := (a21 - a11) * (b11 + b12)
p7 := (a12 - a22) * (b21 + b22)
c11 = p1 + p4 - p5 + p7Dieser Algorithmus zur Matrizenmultiplikation, der Strassen-Algorithmus, benötigt in diesem Fall sieben Multiplikationen und 18 Additionen bzw. Subtraktionen, während der Standardalgorithmus nur 8 Multiplikationen und 4 Additionen benötigt. Im Fall von von 2x2 Matrizen ist der Strassen-Algorithmus also deutlich unterlegen, jedoch erkannte Strassen, dass die Formeln (5.3) und (5.4) gültig bleiben, wenn die aij und bij selbst Matrizen sind. Für diesen allgemeinen Fall werden im folgenden die Algorithmen Am,k, die zwei Matrizen der Ordnung m2k multiplizieren, durch Induktion über k definiert. Falls n keine gerade Zahl ist, dann berechnet man die letzte Spalte von C nach den üblichen Methoden und wendet das Verfahren auf die verbleibenden Matrizen der Dimension n-1 an.
c12 = p3 + p5
c21 = p2 + p4
c22 = p1 + p3 - p2 + p6
Definition 5.5.2: Am,0 sei der Standardalgorithmus zur Matrizenmultiplikation (dieser benötigt m3 Multiplikationen und m2(m-1) Additionen). Ist Am,k bereits bekannt, dann sei Am,k+1 wie folgt definiert:
Sollen die Matrizen A und B der Ordnung m2k+1 multipliziert werden, dann unterteilt man A, B und A.B in Blöcke
P1 := (A11 + A22) * (B11 + B22)indem man für die Multiplikation den Algorithmus Am,k und für die Addition und Subtraktion den gewöhnlichen (elementweisen) Algorithmus verwendet.
P2 := (A21 + A22) * B11
P3 := A11 * (B12 - B22)
P4 := A22 * (B21 + B11)
P5 := (A11 + A12) * B22
P6 := (A21 - A11) * (B11 + B12)
P7 := (A12 - A22) * (B21 + B22)C11 = P1 + P4 - P5 + P7
C12 = P3 + P5
C21 = P2 + P4
C22 = P1 + P3 - P2 + P6
Die Matrizen P1, P2, ..., P7 können alle gleichzeitig berechnet werden. Dies gilt auch für die Matrizen C11, ..., C22, obwohl deren Berechnungsaufwand verglichen mit jenem für die Hilfsmatrizenn P1, P2, ..., P7 verhältnismäßig klein ist, sodaß sich die parallele Berechnung oft nicht lohnt. Der Strassen-Algorithmus ist auf jeden Fall für eine Verwendung auf Parallelrechnern gut geeignet.
Hier ist eine Implementierung des Strassen-Algorithmus in C. Sie ist weder effizient, noch hübsch, noch gibt es eine Garantie, daß sie fehlerfrei ist. Ausserdem gibt sie allokierten Speicher nicht wieder frei. Dennoch sollte sie demonstrieren, wie und daß der Algorithmus funktioniert.
Kmult(n) = nlog27 Multiplikationen undDieser Algorithmus hat also sowohl bezüglich der Additionen als auch bezüglich der Multiplikationen eine asymptotische Komplexität O(nlog27), die deutlich niefriger ist als jene des Standardalgorithmus. Für Matrizen mit allgemeiner Ordnung (nicht notwendigerweise n=2k) gilt:
Kadd(n) = 6(nlog27 - nlog24) Additionen/Subtraktionen
Satz 5.5.1: Das Produkt zweier quadratischer Matrizen der Ordnung n kann mit dem Strassen-Algorithmus mit weniger als 28.nlog27 arithmetischen Operationen berechnet werden.
Die "Grenzdimension" nmin, ab der eine Strassen-Implementierung weniger Rechenzeit erfordert als das entsprechende BLAS-3-Programm sgemm bzw. dgemm, liegt bei den meisten Computern zwischen 32 und 256. Bei größeren Matrizen tritt eine signifikante Verringerung der erforderlichen Gleitpunktoperationen und eine entsprechende Verkürzung der Rechenzeit ein.