Eine Initiative des Fakultätentags Informatik
Autoren
Arno Eigenwillig, Max-Planck-Institut für Informatik, Saarbrücken
Kurt Mehlhorn, Max-Planck-Institut für Informatik, Saarbrücken

16. Algorithmus der Woche
Multiplikation langer Zahlen
...schneller als in der Schule

Multiplizieren haben wir alle schon in der Grundschule gelernt. Um zwei ganze Zahlen a und b miteinander zu multiplizieren, multipliziert man a mit jeder Ziffer von b und arrangiert diese Teilprodukte in einem Stufenschema. Dann addiert man die Teilprodukte spaltenweise.

5 6 7 8 · 4 3 2 1
2 4 5 3 4 6 3 8
2 2 7 1 2
1 7 0 3 4
1 1 3 5 6
5 6 7 8

Wir nennen diese Methode die Schulmethode der Multiplikation. Wenn die Zahlen a und b lang sind, also aus vielen Ziffern bestehen, dann ist diese Methode zu aufwändig. Wir wollen nachfolgend untersuchen:

  1. Was genau heißt hier "aufwändig"?
  2. Wie können wir mit weniger Aufwand multiplizieren?

Das ist aus zweierlei Gründen interessant:

  • Praxis: Schnelles Rechnen mit langen Zahlen braucht man in vielen Anwendungsgebieten der Informatik, zum Beispiel beim Verschlüsseln von Nachrichten und bei der zuverlässigen Lösung geometrischer und rechnerischer Probleme.
  • Theorie: Die Schulmethode der Multiplikation erscheint uns so vertraut und natürlich, dass jede wesentliche Verbesserung - und wir werden eine solche kennen lernen - eine bemerkenswerte Überraschung ist.

Aber was heißt nun, die Schulmethode "ist aufwändig"? Informatiker messen Rechenaufwand nicht in Sekunden (denn nächstes Jahr wird es schon wieder schnellere Computer zu kaufen geben), sondern in der Anzahl der Grundoperationen, die eine Methode ausführt. Eine Grundoperation ist etwas, was ein Computer oder ein Mensch in einem einzelnen gedanklichen Schritt tun kann. Die Grundoperationen, die wir hier brauchen, sind Rechnungen mit den Ziffern 0,1,2,...,8,9, aus denen die Zahlen zusammengesetzt sind:

  • Multiplikation von zwei Ziffern: Wir kennen das kleine Einmaleins, also können wir zu zwei Ziffern x und y, die man uns gibt, in einem Schritt die zwei Ziffern u und v ihres Produktes bestimmen: x·y = 10·u + v.
    Beispiel: Für die Ziffern x = 3 und y = 7 wissen wir x·y = 3·7 = 21 = 10·2 + 1, also haben wir die Ergebnisziffern u = 2 und v = 1.
    Für x = 3 und y = 2 haben wir u = 0 und v = 6.
  • Addition von drei Ziffern: Wir können zu drei Ziffern x,y,z in einem Schritt die zwei Ziffern ihrer Summe ausgeben: x+y+z = 10·u + v.
    (Wir sehen gleich, warum wir hier drei statt zwei Ziffern haben wollen.)
    Beispiel: Für x = 3, y = 5 und z = 4 haben wir u = 1 und v = 2, weil 3+5+4 = 12 = 10·1 + 2.

Wieviele Grundoperationen braucht nun die Schulmethode der Multiplikation? Bevor wir das beantworten können, müssen wir erst einmal über die Addition von zwei Zahlen reden, denn die brauchen wir ja auch fürs Multiplizieren.

Die Addition langer Zahlen

Wie aufwändig ist es, zwei Zahlen a und b zu addieren? Das hängt natürlich von ihrer Länge ab. Sagen wir, a und b bestehen beide aus n Ziffern. (Wenn eine von beiden kürzer ist, fügen wir einfach vorne Nullen an, dann stimmt's wieder.) Um sie zu addieren, schreiben wir sie untereinander und addieren von rechts nach links die Ziffern in jeder Spalte mit der oben eingeführten Ziffern-Addition. Vom Ergebnis 10·u + v schreiben wir die Ziffer v als Ergebnisziffer hin; die Ziffer u schreiben wir als dritte Ziffer (Übertrag) bei der nächsten Spalte dazu. Hier ist ein Beispiel mit vier Ziffern, also für n = 4:

1 1 1 8 6
6 9 1 7
4 2 6 9
1 1 0 1

So gehen wir von rechts nach links alle n Spalten durch. Den letzten Übertrag schreiben wir ohne weitere Rechnung als linkeste Ziffer des Ergebnisses hin. Insgesamt haben wir dann n Grundoperationen durchgeführt, nämlich eine Ziffern-Addition für jede Spalte.

Die Multiplikation einer Zahl mit einer Ziffer

Erinnern wir uns wieder an die Schulmethode der Multiplikation. Die einzelnen Teilprodukte (Zeilen), die bei ihr auftreten, entstehen durch Multiplikation einer langen Zahl a (nämlich dem linken Faktor) mit einer einzelnen Ziffer y (die kommt aus dem rechten Faktor). Diese Multiplikation "Zahl mal Ziffer" schauen wir uns jetzt genauer an. Dazu schreiben wir ihre Zwischenergebnisse etwas ausführlicher hin als sonst: Wir gehen von rechts nach links die Ziffern von a durch. Jede Ziffer x von a multiplizieren wir mit y. Das Ergebnis 10·u + v schreiben wir in eine neue Zeile, und zwar so, dass v in derselben Spalte wie x steht und u links daneben. Anschließend addieren wir alle diese zweistelligen Zwischenergebnisse. Das liefert uns das Teilprodukt, was wir gewöhnlich direkt in eine einzelne Zeile schreiben.
Für das erste Teilprodukt aus unserem Anfangsbeispiel sieht das so aus:

5 6 7 8 · 4
2 2 7 1 2
3 2
2 8
2 4
2 0
0 0 1 0

Wieviele Grundoperationen haben wir durchgeführt? Für jede der n Ziffern von a haben wir eine Ziffern-Multiplikation durchgeführt. (Im obigen Beispiel: vier Ziffern-Multiplikationen für die vier Ziffern der Zahl 5678.) Anschließend mussten wir in n+1 Spalten die Zwischenergebnisse addieren. In der rechtesten Spalte steht nur eine einzelne Ziffer, da müssen wir nichts rechnen. Aber in den anderen n Spalten stehen zwei Ziffern und eventuell ein Übertrag aus der vorigen Spalte, so dass wir pro Spalte eine einzelne Ziffern-Addition brauchen. Das macht n Ziffern-Additionen. Zusammen mit den Ziffern-Multiplikation sind das 2·n Grundoperationen für die Multiplikation "Zahl mal Ziffer".

Die Schulmethode der Multiplikation: Analyse

Jetzt untersuchen wir die Anzahl der Grundoperationen, die die Schulmethode der Multiplikation für zwei lange Zahlen a und b benötigt, die beide aus n Ziffern bestehen. (Wenn eine kürzer ist, schreiben wir einfach so lange Nullen davor, bis sie genau so lang wie die andere ist.)

Für jede Ziffer y von b müssen wir ein Teilprodukt a·y ausrechnen. Das ist eine Multiplikation "Zahl mal Ziffer", benötigt also 2·n Grundoperationen, wie wir uns oben überlegt haben. Weil b insgesamt n Ziffern hat, müssen wir n · (2·n) = 2·n2 Grundoperationen durchführen, um alle Teilprodukte zu errechnen.

5 6 7 8 · 4 3 2 1
2 4 5 3 4 6 3 8
2 2 7 1 2 0 0 0
0 1 7 0 3 4 0 0
0 0 1 1 3 5 6 0
0 0 0 0 5 6 7 8

Als nächstes müssen wir die Teilprodukte so zusammenzählen, wie sie schräg untereinanderstehen. Um uns die Rechnung zu vereinfachen, denken wir uns an den leeren Stellen Nullen hingeschrieben; dann haben wir einfach n Zahlen, die gerade untereinander stehen, und die wir alle addieren müssen. Dazu verwenden wir mehrmals die oben beschriebene Methode zur Addition langer Zahlen: Erst addieren wir die erste Zeile zur zweiten Zeile, zu dieser Zwischensumme addieren wir die dritte Zeile, und so weiter, bis wir schließlich alle n Teilprodukte (Zeilen) addiert haben. Dazu brauchen wir n-1 Additionen langer Zahlen. (Im Beispiel ist n = 4, und wir brauchen drei Additionen zum Zusammenzählen der vier Teilprodukte, nämlich die folgenden: 22712000 + 1703400 = 24415400, 24415400 + 113560 = 24528960 und 24528960 + 5678 = 24534638.)

Aber wieviele Grundoperationen sind das? Um das sagen zu können, müssen wir die Länge aller Zwischensummen kennen, die während dieser Kette von Additionen auftreten. Dafür denken wir ein bisschen um die Ecke: Das Endergebnis a·b unserer Rechnung kann höchstens 2·n Ziffern haben. (Man überlege sich, warum!) Während wir Zeile um Zeile addieren, werden die Zahlen immer nur größer, nie wieder kleiner. Deswegen können auch alle Zwischenergebnisse nur eine Länge von höchstens 2·n Ziffern haben. Nach der obigen Untersuchung über die Addition heißt das: Jede einzelne Addition von Teilprodukten braucht höchstens 2·n Grundoperationen. Für unsere n-1 Additionen dieser Zahlen brauchen wir also höchstens (n-1)·(2·n) = 2·n2 - 2·n Grundoperationen. Zusammen mit den 2·n2 Grundoperationen für das Ausrechnen der Teilprodukte sind das also insgesamt höchstens 4·n2 - 2·n Grundoperationen, um mit der Schulmethode zwei Zahlen aus jeweils n Ziffern miteinander zu multiplizieren; darunter sind n2 Ziffern-Multiplikationen.

Was bedeutet das konkret? Wenn wir mit wirklich langen Zahlen rechnen wollen, sagen wir: mit 100.000 Ziffern, dann brauchen wir fast 40 Milliarden Grundoperationen für eine einzige Multiplikation, darunter 10 Milliarden Ziffern-Multiplikationen. Für jede einzelne Ausgabeziffer eines solchen Produkts brauchen wir im Mittel ca. 200.000 Rechenoperationen. Das ist ein offensichtlich sehr ungünstiges Verhältnis, und es wird noch schlechter, wenn die Zahlen länger werden: Bei 1 Million Ziffern brauchen wir fast 4 Billionen Grundoperationen (davon eine Billion Ziffern-Multiplikationen), das sind sind im Mittel ca. 2 Millionen Grundoperationen für eine einzelne Ergebnisziffer.

Die Methode von Karazuba

Jetzt besprechen wir eine Methode, die mit wesentlich weniger Grundoperationen zwei Zahlen aus n Ziffern multiplizieren kann. Sie ist nach dem russischen Mathematiker Anatolij Alexejewitsch Karazuba (engl.: Karatsuba) benannt, von dem ihre zentrale Idee stammt (veröffentlicht 1962 mit Yu. Ofman). Wir beschreiben diese Methode zunächst für Zahlen mit ein, zwei oder vier Ziffern, dann für Zahlen jeder Länge.

Der einfachste Fall ist die Multiplikation zweier einstelliger Zahlen (n = 1); beispielsweise 8·4 = 32. Dazu braucht man nur eine Grundoperation, nämlich eine einzelne Ziffern-Multiplikation, die direkt das Ergebnis liefert.

Der nächste Fall, den wir uns ansehen wollen, ist der Fall n = 2, also die Multiplikation von zweistelligen Zahlen a und b. Wir schreiben sie zerlegt in ihre Ziffern hin:

a = p·10 + q     und     b = r·10 + s.

Ist beispielsweise a = 78 und b = 21, so lautet die Zerlegung in Ziffern

p = 7 und q = 8     sowie     r = 2 und s = 1.

Jetzt überlegen wir uns, wie das Produkt a·b in Ziffern ausgedrückt aussieht:

a·b = (p·10 + q) · (r·10 + s)
= (p·r)·100 + (p·s + q·r)·10 + q·s.

Für das obige Beispiel (a = 78 und b = 21) ist das

78·21 = (7·2)·100 + (7·1 + 8·2)·10 + 8·1 = 1638.

So wie es dasteht, sieht man direkt, dass man das Produkt der zweistelligen Zahlen a und b ausrechnen kann, indem man vier Multiplikationen einstelliger Zahlen durchführt und die Ergebnisse (gegeneinander verschoben) addiert. Das ist genau das, was die Schulmethode der Multiplikation auch macht. Karazuba verdanken wir die Entdeckung, dass aber auch schon drei Multiplikationen einstelliger Zahlen ausreichen, mit denen man die folgenden Werte berechnet:

u = p·r,
v = (q - p)·(s - r),
w = q·s.

Beim Berechnen von v muss man etwas genauer hinschauen, weil dabei Subtraktionen von zwei Ziffern auftreten. Wir brauchen also Ziffern-Subtraktion als eine weitere Grundoperation, die wir hier zweimal anwenden müssen. Ihre Ergebnisse (q - p) und (s - r) haben zwar nur eine Ziffer, aber möglicherweise ein negatives Vorzeichen. Wenn man sie multipliziert, um v zu erhalten, muss man zunächst für die beiden Ziffern eine Ziffern-Multiplikation durchführen und dann nach den üblichen Regeln ("minus mal minus ist plus" usw.) das Vorzeichen bestimmen.

Aber warum hilft das alles nun beim Multiplizieren? Weil folgende Gleichung gilt:

u + w - v = p·rq·s - (q - p)·(s - r)
= p·sq·r

Der Karazuba-Trick besteht nun darin, mit Hilfe dieser Gleichung das Produkt a·b folgendermaßen auszudrücken:

a·b = u·102 + (u + w - v)·10 + w.

Rechnen wir das einmal für unser Beispiel a = 78 und b = 21 durch. Es ist

u = 7·2 = 14,
v = (8 - 7)·(1 - 2) = -1,
w = 8·1 = 8.

Damit finden wir

78·21 = 14·100 + (14 + 8 - (-1))·10 + 8
= 1400 + 230 + 8
= 1638.

Jetzt haben wir nur noch drei statt vier Ziffern-Multiplikationen benutzt; hinzu kommen mehrere Additionen und Subtraktionen für das Zusammensetzen der Teilergebnisse.

Die Methode von Karazuba für vierstellige Zahlen

Nach dem Fall n = 2 wenden wir uns jetzt dem Fall n = 4 zu, also der Multiplikation von zwei vierstelligen Zahlen a und b. Genau wie oben können wir sie in je zwei Hälften p und q bzw. r und s teilen; diese Hälften vierstelliger Zahlen sind jetzt aber keine Ziffern mehr, sondern zweistellige Zahlen:

a = p·102 + q     und     b = r·102 + s.

Aus diesen vier Hälften berechnen wir mit der Karazuba-Multiplikation zweistelliger Zahlen wieder die drei Hilfsprodukte

u = p·r,
v = (q - p)·(s - r),
w = q·s

und ganz genau wie vorher erhalten wir das Produkt von a und b als

a·b = u·104 + (u + w - v)·102 + w.

Beispiel: Nehmen wir uns noch einmal die Aufgabe a·b für a = 5678 und b = 4321 vor. Zuerst spalten wir a und b in die Hälften p = 56 und q = 78 sowie r = 43 und s = 21. Dann berechnen wir mit Hilfe der Karazuba-Methode für zweistellige Zahlen die Hilfsprodukte

u = 56·43 = 2408,
v = (78 - 56)·(21 - 43) = -484,
w = 78·21 = 1638.

Damit ergibt sich

5678·4321 = 2408·10000 + (2408 + 1638 - (-484))·100 + 1638
= 24080000 + 453000 + 1638
= 24534638.

Für diese Rechnung haben wir drei Hilfsprodukte zweistelliger Zahlen bilden müssen, und wir haben uns ja gerade im vorigen Abschnitt überlegt, wie das mit der Karazuba-Methode geht. Für jedes Hilfsprodukt braucht man drei Ziffern-Multiplikationen. Insgesamt brauchen wir also 3·3 = 9 Ziffern-Multiplikationen und mehrere Additionen und Subtraktionen, um zwei vierstellige Zahlen nach der Karazuba-Methode zu multiplizieren. Mit der Schulmethode hätten wir 16 Ziffern-Multiplikationen und mehrere Additionen benötigt.

Die Methode von Karazuba für beliebig lange Zahlen

Nach dem gleichen Prinzip fortfahrend können wir die Multiplikation 8-stelliger Zahlen auf drei Multiplikationen 4-stelliger Zahlen zurückführen, die Multiplikation 16-stelliger Zahlen auf drei Multiplikationen 8-stelliger Zahlen und so weiter. Mit anderen Worten, für die Karazuba-Methode kann die Länge n der beiden Zahlen a und b irgend eine Potenz von 2 sein, wie nämlich 2 = 21,  4 = 2·2 = 22,  8 = 2·2·2 = 23,  16 = 2·2·2·2 = 24 usw.

In allgemeiner Form können wir die Karazuba-Methode so beschreiben: Zwei Zahlen a und b der Länge n = 2·2·2···2 = 2k teilen wir auf als

a = p·10n/2 + q     und     b = r·10n/2 + s

und berechnen dann ihr Produkt mit drei Multiplikationen von Zahlen der Länge n/2 = 2k-1 in der Art

a·bp·r·10n + (p·rq·s - (q - p)·(s - r))·10n/2q·s.

Auf diese Weise brauchen wir für die Multiplikation von Zahlen der Länge 2k nur dreimal (statt viermal) so viele Ziffern-Multiplikationen wie für Zahlen der Länge 2k-1. Damit ergibt sich die folgende Tabelle für die Anzahl der Ziffern-Multiplikationen, die die Karazuba-Methode und die Schulmethode jeweils benötigen, um Zahlen einer bestimmten Länge n zu multiplizieren:

Länge n Karazuba Schulmethode
1 = 20 1 1
2 = 21 3 4
4 = 22 9 16
8 = 23 27 64
16 = 24 81 256
32 = 25 243 1.024
64 = 26 729 4.096
128 = 27 2.187 16.384
256 = 28 6.561 65.536
512 = 29 19.638 262.144
1.024 = 210 59.049 1.048.576
1.048.576 = 220 3.486.784.401 1.099.511.627.776
... ... ...
n = 2k 3k 4k

Wer das Rechnen mit Logarithmen beherrscht, kann die Tabelleneinträge auch leicht als Funktion von n ausdrücken:
In der Spalte für die Schulmethode steht für n = 2k der Wert 4k. Wir schreiben log für den Logarithmus zur Basis 2. Damit gilt k = log(n) und

4k = 4log(n) = (2log(4))log(n)nlog(4)n2.

Bei der Karazuba-Methode hingegen steht

3k = 3log(n) = (2log(3))log(n)nlog(3)n1,58....

Vergleichen wir nun einmal die Tabelle mit unserer Analyse der Schulmethode für die Multiplikation von Zahlen mit einer Million Ziffern. Die Schulmethode benötigte fast 4 Billionen Grundoperationen, davon eine Billion Ziffern-Multiplikationen. Um statt dessen die Karazuba-Methode anwenden zu können, müssen wir zunächst vor die eine Million Ziffern noch eine Kette von Nullen schreiben, um auf die nächsthöhere Zweierpotenz zu kommen, nämlich 220 = 1.048.576. (Andernfalls könnten wir die Länge nicht immer weiter durch 2 teilen, bis wir bei 1 angekommen sind.) Dann können wir mit der Karazuba-Methode multiplizieren und brauchen dafür "nur" etwa dreieinhalb Milliarden Ziffern-Multiplikationen (siehe Tabelle). Das ist gerade noch ein 287stel des Aufwandes der Schulmethode. (Zum Vergleich: Das Verhältnis von einer Sekunde zu den sprichwörtlichen "fünf Minuten" ist ein 300stel.) Wir sehen also: Die Karazuba-Methode ist im Rechenaufwand erheblich sparsamer; zumindest dann, wenn man - so wie wir - nur die Ziffern-Multiplikationen zählt. Für eine präzise Untersuchung muss man auch noch beachten, welchen Aufwand das Addieren und Subtrahieren der Zwischenergebnisse verursacht. Unsere Beispiele mit zwei und vier Ziffern möchte man dann vielleicht lieber nach der Schulmethode ausrechnen. Wenn die Zahlen ziemlich lang werden, gewinnt die Karazuba-Methode aber, weil sie viel weniger Zwischenergebnisse als die Schulmethode produziert. Ab welcher Länge genau sie schneller ist, hängt von den Eigenheiten des benutzten Computers ab.

Fassen wir zum Abschluss noch einmal zusammen: Was ist das Erfolgsrezept hinter der Karazuba-Methode? Es besteht aus zwei entscheidenden Ideen.

Die erste Idee ist eine ganz allgemeine: Die vorgelegte Aufgabe "multipliziere zwei Zahlen der Länge n" wird zurückgeführt auf mehrere Aufgaben von der gleichen Art, aber von kleinerer Größe, nämlich: "multipliziere zwei Zahlen der Länge n/2". Damit verkleinern wir das Problem so lange, bis es ganz einfach geworden ist ("multipliziere zwei Ziffern"). Dieses Prinzip nennt sich divide and conquer (dt.: teile und herrsche), und wir haben es schon in früheren Algorithmen der Woche in Aktion gesehen (etwa beim schnellen Sortieren). Für die verschiedenen Größen des Problems programmiert man natürlich nicht jeweils eine neue Prozedur, sondern man schreibt eine Prozedur für allgemeine Länge n, die sich für die verringerte Problemgröße n/2 mehrfach selbst aufruft. Dies nennt man Rekursion, und das ist eine der wichtigsten Techniken überhaupt in der Informatik.

Die zweite Idee, speziell für die Multiplikation, ist der Karazuba-Trick, mit dem es gelingt, bei jeder rekursiven Aufteilung des Problems nur drei statt vier Unterprobleme lösen zu müssen. Dieser scheinbar winzige Unterschied ergibt über die ganze Rekursion hinweg eine enorme Ersparnis und macht den Vorteil der Karazuba-Methode gegenüber der Schulmethode aus.

Autoren: Material: Externe Links:

Die Autoren danken H. Alt, M. Dietzfelbinger und C. Klost für hilfreiche Anmerkungen.

Für Inhalte und Verfügbarkeit der externen Links übernehmen wir keine Gewähr. (Haftungsausschluss)