 
Schönhage-Strassen-Algorithmus
Der Schönhage-Strassen-Algorithmus ist ein Algorithmus zur Multiplikation zweier n-stelliger ganzer Zahlen. Er wurde 1971 von Arnold Schönhage und Volker Strassen entwickelt. Der Algorithmus basiert auf einer sehr schnellen Variante der diskreten schnellen Fourier-Transformation sowie einem geschickten Wechsel zwischen der Restklassen- und der zyklischen Arithmetik in endlichen Zahlenringen.
Der Schönhage-Strassen-Algorithmus terminiert in  
(siehe Landau-Notation), 
wenn als Effizienzmaß die Bitkomplexität auf mehrbändigen Turingmaschinen, also 
die maximale Laufzeit des Algorithmus gemessen als benötigte Bitoperationen in 
Abhängigkeit von der Bitlänge 
 
der Eingabegrößen gewählt wird. Diese Komplexität stellt eine Verbesserung 
sowohl gegenüber dem naiven aus der Schule bekannten Algorithmus der Laufzeit 
 
als auch gegenüber dem 1962 entwickelten Karatsuba-Algorithmus 
mit einer Laufzeit von 
 
sowie dessen verbesserter Variante, dem Toom-Cook-Algorithmus 
mit 
 
Laufzeit dar. 
Der Schönhage-Strassen-Algorithmus war von 1971 bis 2007 der effizienteste 
bekannte Algorithmus zur Multiplikation großer Zahlen; 2007 veröffentlichte Martin 
Fürer eine Weiterentwicklung des Algorithmus mit der noch niedrigeren 
asymptotischen Komplexität , 
wobei 
 
der iterierte 
Logarithmus von n ist.
 Durch Optimierungen des Algorithmus von Fürer erreichten David Harvey, Joris 
van der Hoeven und Grégoire Lecerf eine weitere Verbesserung der asymptotischen 
Laufzeit auf 
. 
Bedeutung
Bis 2007 konnte kein effizienterer Algorithmus 
gefunden werden. Als untere Schranke gibt es für den allgemeinen Fall nur die 
(triviale) lineare Laufzeit, an die sich der Algorithmus mit wachsender 
Zahlenlänge annähert. Allerdings haben die Forscher Hinweise dafür gefunden, 
dass die Schranke  
niemals unterboten werden kann. Selbst bei modernen Computern 
ist diese Methode der Berechnung erst bei Zahlen mit mehreren tausend Stellen 
effizienter als der Karatsuba-Algorithmus. Dies liegt wohl allerdings weniger am 
Overhead des 
Schönhage-Strassen-Algorithmus, sondern vielmehr an der seit Jahrzehnten 
typischen Designoptimierung 
der Computerprozessoren, die dem Erreichen schneller Gleitkommaoperationen 
den Vorzug vor der Arithmetik 
in endlichen Restklassenringen 
ganzer Zahlen gibt. 
Für die Suche nach den Algorithmen mit der besten (Zeit-)Komplexität in der Computer-Algebra genießt der Schönhage-Strassen-Algorithmus zentrale Bedeutung.
Algorithmus
Grundidee und Terminologie
 
  
Um zwei ganze Zahlen  
und 
 
zu multiplizieren, wird im Groben folgendes Schema angewandt: 
- Aufspaltung der Zahlen (in Binärdarstellung) und in Stücke passender Länge 
- Schnelle diskrete Fourier-Transformation (DFT) der beiden Stückfolgen
- Komponentenweise Multiplikation der transformierten Stücke
- Rücktransformation (inverse Fouriertransformation) der Ergebnisse
- Zusammensetzen der Ergebnisstücke zur Ergebniszahl
Die im mittleren Schritt durchzuführenden kleinen Multiplikationen werden im rekursiven Sinne wiederum durch den Schönhage-Strassen-Algorithmus ausgeführt.
Um zu verstehen, warum das Ergebnis das Produkt der Zahlen a und b ist, betrachtet man die Polynome
- und 
Setzt man  
ein, so erhält man gerade die Binärdarstellung der Zahlen a und b. Zu berechnen 
ist 
 
für das Produktpolynom 
Wir bestimmen die Fouriertransformierte der Koeffiziententupel von A und B:
- für 
- für 
Anders gesagt wertet man die beiden Polynome an den Stellen  
aus. Multipliziert man nun diese Funktionswerte, so ergeben sich die 
entsprechenden Funktionswerte des Produktpolynoms 
- . 
Um das Polynom  
selbst zu gewinnen, müssen wir die Transformation rückgängig machen: 
- für 
- für 
- für 
Nach Definition der Einheitswurzeln 
gilt .
 Diese genügt folgender Identität geometrischer Summen von Einheitswurzeln: 
- für 
denn
- für 
Somit gilt:
- für 
Im Artikel Diskrete 
Fourier-Transformation sind die mathematische 
Grundlagen dieser Transformation weiter ausgeführt. Da bei der 
Transformation  
Summen mit jeweils 
 
Termen entstehen, haben wir bei einer klassischen Berechnung der Terme (etwa 
durch das Horner-Schema) 
nach wie vor eine quadratische Laufzeit. Mittels der schnellen 
Fourier-Transformation kann man diese Werte schneller berechnen. Diese 
Berechnung beruht auf folgendem Teile-und-herrsche-Prinzip: 
Man setzt Teillösungen mittels einfacher Operationen (Addition und einfache 
Multiplikation) zusammen. Damit können die Transformationen in Zeit  
berechnet werden. Durch das Runden der komplexen 
Einheitswurzeln auf feste Stellenlänge ergeben sich jedoch Rechenfehler. Um 
diese auszugleichen, muss für ein resultierendes Bit mit mindestens 
 
Bits gerechnet werden. Daraus ergibt sich eine Gesamtlaufzeit von 
. 
Bei der Schönhage-Strassen-Variante rechnen wir stattdessen in einem Restklassenring und 
vermeiden damit die Rechenfehler der komplexen Zahlen. 
Des Weiteren ist die Multiplikation keine reine Faltung, sondern es kann auch zu Überträgen kommen; nach Durchführen der FT und iFT müssen diese passend behandelt werden.
Die Aufgabe der Multiplikation zweier ganzer Zahlen wird nun wie folgt konkretisiert:
Es seien die zwei zu multiplizierenden Zahlen  
in Binärzifferdarstellung gegeben. Weiter sei 
 
die maximale Länge (also Binärziffernanzahl) der beiden Zahlen. 
Nach passender Behandlung der Vorzeichen 
der beiden Zahlen sowie der trivialen Sonderfälle  
und 
 
(was mit linearem Aufwand 
 
machbar ist) darf man davon ausgehen, dass 
 
natürliche Zahlen sind. Der Schönhage-Strassen-Algorithmus löst diese Aufgabe in 
. 
Theoretische Vorbereitungen
Superschnelle DFT
Die oben angesprochene superschnelle DFT, die das Kernstück des Algorithmus darstellt, muss etwas ausführlicher erläutert werden, da sie hier sehr speziell eingesetzt wird.
Es sei  
ein kommutativer 
unitärer 
Ring. In 
 
sei das Element 
 
eine Einheit; 
weiterhin sei 
 
eine 
te 
Einheitswurzel (also 
), 
die die Gleichheit 
 
erfüllt. Dann lässt sich die Berechnung der diskreten Fouriertransformation 
(DFT) im Produktraum 
 
(dies ist eine Kurznotation für 
; 
der Begriff Vektorraum 
ist hier nur für den Fall, dass 
 
ein Körper 
ist, üblich) wie folgt in einer schnellen Variante (als FFT) durchführen: 
Zu berechnen ist für  
die Transformierte 
 
mit 
- für - . 
Indem wir die Indizes  
und 
 
in Binärdarstellung aufschreiben, wobei wir dies bei der Zahl 
 
in umgekehrter Reihenfolge tun, ist die Transformierte 
 
wie folgt optimiert berechenbar: 
Es seien
- für 
und
- . 
 
Die geschlossene Darstellung für diese Zwischenterme ist
- . 
 
(Zum Nachrechnen dieser Darstellung beachte man ). 
Diese Rekursion liefert die gewünschten Fourierkoeffizienten . 
Aufgrund der Eigenschaft  
können wir den Rekursionsschritt etwas berechnungsfreundlicher umformen zu 
und
mit dem gleichen Exponenten . 
Die Umkehrtransformation, also die inverse FFT, gelingt, da wir vorausgesetzt 
haben, dass  
im Ring 
 
invertierbar ist: 
sowie
- , 
 
wobei wiederum  
ist. 
In der Anwendung im Schönhage-Strassen-Algorithmus wird tatsächlich nur eine halbierte FFT benötigt; gemeint ist damit folgendes: Beginnen wir im 1. Schritt der Rekursion mit der Berechnung
nur für  
und schränken wir die weiteren Schritte der Rekursion ebenso auf 
 
ein, so berechnen wir gerade alle 
 
für ungerade Werte 
. 
Will man umgekehrt aus diesen 
 
für ungerade 
 
(das sind 
 
Stück) lediglich die Differenzen 
 
der ursprünglichen 
 
zurückgewinnen, so genügt auch in der Rückrichtung die halbierte Rekursion. 
Im Schönhage-Strassen-Algorithmus wird die geschilderte schnelle 
Fouriertransformation für endliche Zahlenringe  
mit Fermatzahlen 
 
benötigt. 
Hinweis zur Notation: Für den Restklassenring 
 
benutzen wir hier die kürzere Schreibweise 
, 
die lediglich im Kontext der p-adischen Zahlen zu 
Verwechslungen führen könnte. 
Als Einheitswurzel wird im Ring  
die Zahl 
 
(oder je nach Kontext auch eine geeignete Potenz von 2) zum Einsatz kommen. Die 
beim FFT-Algorithmus durchzuführenden Multiplikationen sind dann von der Form 
; 
allerdings sind sie nicht als reine 
Shift-Operationen 
durchführbar, da das Reduzieren eines größeren Zwischenergebnisses modulo 
 
noch nachgeschoben werden muss. Hier greift eine der brillanten Ideen von 
Schönhage und Strassen: Sie betten den Ring (ausgestattet mit der Restklassenarithmetik) 
passend in einen größeren, mit der zyklischen 
Arithmetik ausgestatteten Überring ein. Dieser Überring hat eine 2-Potenz 
als Ordnung, so dass in ihm die entsprechende Multiplikation tatsächlich als 
reine Shift-Operation 
durchführbar ist. Diesen Trick kann man in einem schönen Struktursatz über 
Restklassen- und zyklische Arithmetik in endlichen Zahlenringen zusammenfassen. 
Struktursatz über zyklische Arithmetik
Der Struktursatz über zyklische Arithmetik lässt sich formal wie folgt fassen:
Für eine Zweierpotenz  
mit einer natürlichen Zahl 
 
gilt 
- . 
Hierbei bezeichnet  
die durch die Repräsentanten 
 
darstellbaren Restklassen modulo 
 
ausgestattet mit der Restklassenarithmetik, d.h. mit der Addition und 
Multiplikation modulo 
. 
Die in diesem Restklassenring vorkommenden Zahlen können mit 
 
Binärziffern dargestellt werden. 
Die auf der rechten Seite vorkommende Struktur  
bezeichnet die Restklassen modulo der Zahl 
, 
die allerdings nicht mit der Restklassenarithmetik, sondern abweichend mit der 
zyklischen Arithmetik ausgestattet werden. Hierbei werden bei 
Zwischenergebnissen, die zu groß werden, Überträge aufgehoben und auf das 
Endergebnis additiv aufgeschlagen. Dies entspricht in Binärzifferdarstellung 
einer Verschiebung der überständigen Binärziffern (rechtsbündig an die 
niedrigsten Zifferpositionen gestellt) mit nachfolgender Addition. 
Beispielsweise ergibt die Addition 
 
mit 
 
nicht den Wert 
, 
sondern den Wert 
. 
Aus der so erhaltenen Zahlenstruktur mit zyklischer Arithmetik wird nun noch der 
Faktorring modulo 
 
gebildet. Es werden also die Endergebnisse noch modulo 
 
reduziert. 
Damit besagt dieser Struktursatz folgendes: Das modulo-Rechnen in  
kann ebenso ersetzt werden durch das zyklische Rechnen im größeren Zahlenraum 
 
mit nachfolgendem Reduzieren modulo 
. 
Entscheidend für das Gelingen der in diesem Struktursatz vorgestellten 
Einbettung ist die Eigenschaft, dass die größte darstellbare Zahl  
im zyklischen Zahlenraum (hier ist dies die Zahl 
) 
die Zahl 
 
aus dem Restklassenring 
 
repräsentiert. Hierfür ist die Bedingung 
 
notwendig. Damit die zyklische Arithmetik aber überhaupt sinnvoll definiert 
werden kann, muss andererseits 
 
eine Zweierpotenz sein. Zusammen ergibt sich, dass 
 
die optimale Wahl für die Größe des zyklischen Einbettungsraumes darstellt. 
Der klassische Restklassenring  
wäre für die Einbettung dagegen nicht geeignet, denn in diesem Ring gilt 
, 
d.h. die Zahl 
 
ist in diesem Ring ein Nullteiler. 
Durchführung
Haben wir die zu multiplizierenden Zahlen  
mit 
 
Binärziffern vorliegen, so führen wir je nachdem, ob 
 
gerade oder ungerade ist, unterschiedliche Rekursionsschritte aus, um die 
Stellenzahl in einem Einzelschritt zu logarithmieren: 
Rekursionsschritt für ungerades m
Diesen Schritt der Rückführung von  
auf 
 
führen wir mit der Komplexität 
 
durch. 
Es seien  
mit 
 
und der Fermatzahl 
 
zu multiplizieren. Wir werden in diesem Schritt die Rückführung auf die 
Fermatzahl 
 
vollziehen. 
Für die zu den beiden Fermatzahlen gehörenden Zweierpotenzen führen wir die Abkürzungen
und
ein. Die halbierte Stellenzahl von  
wird unsere Stückelungsgröße werden, d.h. wir entwickeln 
 
und 
 
nach Potenzen von 
: 
- und - , 
wobei für die Einzelstücke  
gilt. In Binärdarstellung entspricht diese Zerlegung einer einfachen Gruppierung 
der Bitfolgen in Stücke der Länge 
 
Bits. 
Eine kleine Schwäche des Algorithmus (die allerdings der erreichten 
Komplexitätsschranke keinen Abbruch tut) offenbart sich jetzt. Um die 
superschnelle DFT auf die Stückfolgen  
und 
 
anwenden zu können, müssen diese zur nächsten Zweierpotenzlänge mit Nullen 
aufgefüllt werden; die Zahlendarstellung wird also künstlich verlängert zu 
- und - . 
Vermöge des oben erwähnten Struktursatzes zur zyklischen Arithmetik wechseln 
wir nun vom Restklassenring  
über zum Quotientenraum 
 
mit der zyklischen Arithmetik. In diesem Raum errechnet sich für die 
Multiplikationsaufgabe 
- , 
wobei wir im letzten Schritt die Eigenschaft  
in diesem zyklischen Zahlenraum benutzt haben. 
Zusammenfassend erhält die Multiplikation also die Form
mit den Ergebniskoeffizienten
- . 
Wir können  
nach oben abschätzen. 
Nun folgt eine Umschreibung der Summenformel, damit wir uns bei der anzuwendenden FFT auf eine halbierte FFT beschränken können.
Es gilt ,
 also ist 
mit  
in 
.
 Durch passende Addition können wir den Wertebereich ins Positive verschieben, 
es ist nämlich 
, 
und mit der Definition 
gilt
- . 
Für die nichttrivialen  
(Indizes 
 
bis 
) 
gilt die Abschätzung 
. 
Da die beiden Zahlen 
 
und 
 
teilerfremd ist, genügt zur Bestimmung der 
 
die Berechnung der Reste 
 
und 
. 
Hat man nämlich die Reste  
und 
 
bestimmt, so kann man in Komplexität 
 
wie folgt rechnen: Berechne erst 
 
und dann 
. 
Bestimmung der Reste modulo 2n+2
Hier wenden wir einen für die Computeralgebra sehr typischen Trick an: Wir 
setzen die Stückfolgen  
und 
 
durch Einfügen genügend langer Nullsequenzen mit Sicherheitsabständen so 
zusammen, dass nach Produktbildung die Einzelergebnisse ebenfalls noch ohne 
Überlappungen in Stücken aneinandergereiht sind. Es seien also 
 
und 
 
in 
. 
Wir bilden nun 
- und 
und haben dabei . 
Das Produkt 
 
enthält dann in disjunkten Stücken der Bitlänge 
 
die Summen 
mit , 
denn es ist 
. 
Für die Terme 
 
unserer ursprünglichen Multiplikationsaufgabe 
 
sehen wir 
- . 
Für die zu bestimmenden Reste  
erhalten wir 
- in - . 
Der Komplexitätsaufwand für die Bildung aller  
sowie der Extraktion der 
 
ist 
; 
die Multiplikation 
 
kostet 
, 
insgesamt ist dies also 
. 
Bestimmung der Reste modulo (D+1)
Hier kommt die DFT zum Einsatz. Wir unterziehen die Vektoren  
und 
 
mit 
 
der DFT in 
 
mit 
 
und der Zahl 
 
als 
-ter 
Einheitswurzel. Da wir nur die Differenzen 
 
benötigen, genügt die halbierte DFT: 
- DFT zur Bestimmung der und nur für die ungeraden mit 
- Multiplikationen - für alle ungeraden 
- Inverse DFT zur Gewinnung aller Differenzen aus den für ungerade 
Der Komplexitätsaufwand hierfür besteht aus  
Schritten des Einzelaufwands 
 
für die DFT (gesamt also 
); 
hinzu kommen die Addition von 
 
sowie die Reduktionen modulo 
 
für die Gewinnung der 
, 
was in 
 
bewältigt werden kann. 
Rekursionsschritt für gerades m
Auch für diesen Schritt der Rückführung von  
auf 
 
wird die Komplexität 
 
erreicht. 
Es seien  
mit 
 
und der Fermatzahl 
 
zu multiplizieren. Wir werden auch in diesem Schritt die Rückführung auf die 
Fermatzahl 
 
vollziehen. 
Für die zu den beiden Fermatzahlen gehörenden Zweierpotenzen führen wir analog die Abkürzungen
und
ein. Wiederum wird die halbierte Stellenzahl von  
unsere Stückelungsgröße werden, d.h. wir entwickeln 
 
und 
 
nach Potenzen von 
: 
- und - , 
wobei für die Einzelstücke  
gilt. 
Wie oben verlängern wir die Zahlendarstellung auf Zweierpotenzlänge zu
und analog für . 
Unter abermaliger Zuhilfenahme des Struktursatzes zur zyklischen Arithmetik 
wechseln wir nun vom Restklassenring  
über zum Quotientenraum 
 
mit der zyklischen Arithmetik. 
Damit können wir wieder
mit den Ergebniskoeffizienten
darstellen. Dabei können wir  
nach oben abschätzen. 
Aus  
können wir wieder 
folgern, und mit
gilt
mit .
 Für die nichttrivialen 
 
(Indizes 
 
bis 
) 
gilt die Abschätzung 
. 
Wegen der Teilerfremdheit der beiden Zahlen 
 
und 
 
genügt es wieder zur Bestimmung der 
, 
die Reste 
 
und 
 
zu berechnen. 
Bestimmung der Reste modulo 2n+1
Wir wenden wieder den Trick der Einfügung von Sicherheitsabständen an: Es 
seien also  
und 
 
in 
. 
Wir bilden 
- und 
und haben dabei . 
Das Produkt 
 
enthält dann in disjunkten Stücken der Bitlänge 
 
die Summen 
mit . 
Für die gesuchten 
 
unserer ursprünglichen Multiplikationsaufgabe 
 
sehen wir 
- . 
Für die zu bestimmenden Reste  
erhalten wir 
- in - . 
Bestimmung der Reste modulo (D+1)
Mit  
unterziehen wir wieder die Vektoren 
 
und 
 
mit 
 
der DFT in 
, 
wobei wir diesmal die Zahl 
 
als 
-te 
Einheitswurzel wählen. Da wir nur die Differenzen 
 
benötigen, genügt hier wiederum die halbierte DFT: 
- DFT zur Bestimmung der und nur für die ungeraden mit 
- Multiplikationen - für alle ungeraden 
- Inverse DFT zur Gewinnung aller Differenzen aus den für ungerade 
Zusammenfassung
Startend mit  
und 
 
mit Ziffernlänge 
 
wird durch die dargestellte Rekursion eine Komplexität von 
 
erreicht. 
Abgewandelte Form
Zimmermann und Brent beschreiben eine Variante des Algorithmus, bei der die 
Laufzeit (in Abhängigkeit von der Länge der Eingabe) keine Sprünge macht, 
sondern stetiger verläuft. Dies wird erreicht, indem die DFT-Vektoren nicht aus 
-stelligen 
Binärzahlen, sondern Zahlen der passenden Länge gebildet werden. Dadurch muss 
die Länge der zu transformierenden Vektoren keine Zweierpotenz sein. 

 Wikipedia.de
  
    Wikipedia.de

© biancahoegel.de
Datum der letzten Änderung: Jena, den: 27.10. 2022