<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Strassen-Algorithmus</id>
	<title>Strassen-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Strassen-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Strassen-Algorithmus&amp;action=history"/>
	<updated>2026-05-23T05:45:17Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Strassen-Algorithmus&amp;diff=969698&amp;oldid=prev</id>
		<title>2001:4BC9:803:190B:8ACF:8874:9911:A775: Es sollte stets O (groß Oh) stehen</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Strassen-Algorithmus&amp;diff=969698&amp;oldid=prev"/>
		<updated>2025-05-17T08:25:16Z</updated>

		<summary type="html">&lt;p&gt;Es sollte stets O (groß Oh) stehen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Strassen-Algorithmus&amp;#039;&amp;#039;&amp;#039; (erfunden vom deutschen Mathematiker [[Volker Strassen]]) ist ein [[Algorithmus]] aus der [[Lineare Algebra|Linearen Algebra]] und wird zur [[Matrizenmultiplikation]] verwendet. Der Strassen-Algorithmus realisiert die Matrizenmultiplikation asymptotisch effizienter als das Standardverfahren und ist in der Praxis schneller für große [[Matrix (Mathematik)|Matrizen]] (solche mit einem [[Rang (Lineare Algebra)|Rang]] größer als 1000).&lt;br /&gt;
&lt;br /&gt;
== Der Algorithmus ==&lt;br /&gt;
Vereinfachend wird der Spezialfall quadratischer Matrizen mit &amp;lt;math&amp;gt;2^k&amp;lt;/math&amp;gt; Zeilen bzw. Spalten betrachtet.&lt;br /&gt;
&lt;br /&gt;
Seien also &amp;lt;math&amp;gt;A, B \in R^{2^k \times 2^k}&amp;lt;/math&amp;gt; Matrizen über einem [[Ring (Algebra)|Ring]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; und ferner ihr Produkt &amp;lt;math&amp;gt;C = A \cdot B \in R^{2^k \times 2^k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Diese lassen sich auch als [[Blockmatrix|Blockmatrizen]]&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
A=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
    A_{1,1} &amp;amp; A_{1,2} \\&lt;br /&gt;
    A_{2,1} &amp;amp; A_{2,2}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
,\qquad B=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
    B_{1,1} &amp;amp; B_{1,2} \\&lt;br /&gt;
    B_{2,1} &amp;amp; B_{2,2}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
,\qquad C=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
    C_{1,1} &amp;amp; C_{1,2} \\&lt;br /&gt;
    C_{2,1} &amp;amp; C_{2,2}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
betrachten, wobei&lt;br /&gt;
&amp;lt;math&amp;gt;A_{i,j}, B_{i,j}, C_{i,j} \in R^{2^{k-1} \times 2^{k-1}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
sind.&lt;br /&gt;
&lt;br /&gt;
Für die Multiplikation von Blockmatrizen gilt:&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{1,1} = A_{1,1}\cdot B_{1,1} + A_{1,2}\cdot B_{2,1} &amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{1,2} = A_{1,1}\cdot B_{1,2} + A_{1,2}\cdot B_{2,2} &amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{2,1} = A_{2,1}\cdot B_{1,1} + A_{2,2}\cdot B_{2,1} &amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{2,2} = A_{2,1}\cdot B_{1,2} + A_{2,2}\cdot B_{2,2} &amp;lt;/math&amp;gt;&lt;br /&gt;
Die direkte Berechnung der &amp;lt;math&amp;gt;C_{i,j}&amp;lt;/math&amp;gt; benötigt also &amp;lt;math&amp;gt;8&amp;lt;/math&amp;gt; (aufwändige) Matrizenmultiplikationen. Um diese Anzahl zu reduzieren, berechnet der Algorithmus von Strassen folgende Hilfsmatrizen:&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{1} := (A_{1,1} + A_{2,2})\cdot (B_{1,1} + B_{2,2})&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{2} := (A_{2,1} + A_{2,2})\cdot B_{1,1}&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{3} := A_{1,1} \cdot(B_{1,2} - B_{2,2})&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{4} := A_{2,2} \cdot(B_{2,1} - B_{1,1})&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{5} := (A_{1,1} + A_{1,2})\cdot B_{2,2}&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{6} := (A_{2,1} - A_{1,1}) \cdot(B_{1,1} + B_{1,2})&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;M_{7} := (A_{1,2} - A_{2,2}) \cdot(B_{2,1} + B_{2,2})&amp;lt;/math&amp;gt;&lt;br /&gt;
Zur Berechnung der &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; sind lediglich &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt; Multiplikationen nötig, die &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; lassen sich nun durch [[Addition]]en (und [[Subtraktion]]en) ermitteln:&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{1,1} = M_{1} + M_{4} - M_{5} + M_{7}&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{1,2} = M_{3} + M_{5}&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{2,1} = M_{2} + M_{4}&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;C_{2,2} = M_{1} - M_{2} + M_{3} + M_{6}&amp;lt;/math&amp;gt;&lt;br /&gt;
Für die Multiplikationen in der Berechnung der &amp;lt;math&amp;gt;M_i&amp;lt;/math&amp;gt; wird obiges Verfahren [[Rekursion|rekursiv]] ausgeführt, bis das Problem auf die [[Multiplikation]] von [[Skalar (Mathematik)|Skalar]]en reduziert ist.&lt;br /&gt;
&lt;br /&gt;
In der Praxis kann die gewöhnliche Multiplikation für kleine Matrizen durchaus schneller sein. Daher bietet sich ein Wechsel zur gewöhnlichen Multiplikation anstelle eines rekursiven Aufrufs an, sobald die Matrizendimensionen klein genug sind (Cut-Off).&lt;br /&gt;
&lt;br /&gt;
[[Datei:Strassen algorithm.svg|mini|800px|zentriert|Die linke Spalte repräsentiert eine &amp;lt;math&amp;gt;2\times 2&amp;lt;/math&amp;gt;-[[Matrix (Mathematik)#Matrizenmultiplikation|Matrizenmultiplikation]]. Jede andere Spalte repräsentiert eine der &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt; Multiplikationen des Strassen-Algorithmus.]]&lt;br /&gt;
&lt;br /&gt;
== Aufwand ==&lt;br /&gt;
Der [[Matrizenmultiplikation#Standardalgorithmus|Standardalgorithmus zur Matrizenmultiplikation]] benötigt&lt;br /&gt;
: &amp;lt;math&amp;gt;n^{\log_{2}8}= n^3&amp;lt;/math&amp;gt;&lt;br /&gt;
Multiplikationen der Elemente des Ringes &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;. Die benötigten Additionen sind hierbei nicht in die [[Komplexität (Informatik)|Komplexitätsberechnung]] eingeflossen, Sie können, abhängig von &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;, in Computerimplementationen viel schneller sein als die Multiplikationen. (Insbesondere bei gewöhnlichen ganzen oder Fließkommazahlen ist das oft der Fall.) Mit dem Strassen-Algorithmus wird die Anzahl der Multiplikationen auf&lt;br /&gt;
: &amp;lt;math&amp;gt;n^{\log_{2}7}\approx n^{2,807}&amp;lt;/math&amp;gt;&lt;br /&gt;
reduziert. Die Reduktion der Anzahl der Multiplikationen führt allerdings zu einer Verringerung der [[Stabilität (Numerik)|numerischen Stabilität]].&amp;lt;ref&amp;gt;{{cite journal|last=Miller | first=Webb | title=Computational complexity and numerical stability | url=https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.148.9947&amp;amp;rep=rep1&amp;amp;type=pdf | language=en | year=1975 | journal=SIAM News | format=PDF | volume=4 | pages=97–107}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine saubere Analyse einschließlich der Additionen ist mit dem Master-Theorem möglich: Die gewöhnliche Matrizenmultiplikation benötigt &amp;lt;math&amp;gt;2n^3-n^2 \in  O(n^3)&amp;lt;/math&amp;gt; Schritte (Multiplikationen und Additionen gleich gewichtet und zusammenaddiert). Dies gilt auch für den ganz oben erklärten naiven rekursiven Algorithmus, denn er erzeugt 8 Teilprobleme der Größe &amp;lt;math&amp;gt;\frac{n}{2}&amp;lt;/math&amp;gt;und zudem sind 4 quadratische Matrizen der Seitenlänge &amp;lt;math&amp;gt;\frac{n}{2}&amp;lt;/math&amp;gt; zu addieren, was einen zusätzlichen Aufwand von &amp;lt;math&amp;gt;4 \cdot \left( \frac{n}{2} \right)^2 = n^2&amp;lt;/math&amp;gt; nach sich zieht, also gilt für seine Laufzeit die Rekursion&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;T(n) = 8 \cdot T \left( \frac{n}{2} \right) + n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
was nach dem [[Master-Theorem]] &amp;lt;math&amp;gt;T(n) \in O(n^{\log_2 8}) = O(n^3)&amp;lt;/math&amp;gt; nach sich zieht.&lt;br /&gt;
&lt;br /&gt;
Der Strassen-Algorithmus erzeugt hingegen jeweils nur sieben solche Teilprobleme, auch wenn dafür nun 18 Additionen oder Subtraktionen von Matrizen mit halber Seitenlänge, also &amp;lt;math&amp;gt;18 \cdot \left( \frac{n}{2} \right)^2 = \frac{9}{2} \cdot n^2&amp;lt;/math&amp;gt; Additionen/Subtraktionen einzelner Matrixeinträge in &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;, erforderlich sind:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;T(n) = 7 \cdot T \left( \frac{n}{2} \right) + \frac92 \cdot n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Master-Theorem folgt &amp;lt;math&amp;gt;T(n) \in O\left( n^{\log_2 7} \right)&amp;lt;/math&amp;gt; (mit &amp;lt;math&amp;gt;\log_2 7 \approx 2{,}807&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Volker Strassen: &amp;#039;&amp;#039;Gaussian Elimination is not Optimal&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;Numerische Mathematik&amp;#039;&amp;#039;, Band 13, 1969, S. 354–356, {{ISSN|0029-599X}}, [[doi:10.1007/BF02165411]].&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{MathWorld |id=StrassenFormulas |title=Strassen Formulas}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Numerische lineare Algebra]]&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;/div&gt;</summary>
		<author><name>2001:4BC9:803:190B:8ACF:8874:9911:A775</name></author>
	</entry>
</feed>