Multiplikation langer Zahlen Aljoscha Rudawski 20.5.2017 Inhaltsverzeichnis 1 Einleitung 1 2 Multiplikation nach Lehrbuch 2.1 Addition langer Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Multiplikation von Zahlen mit Ziffern . . . . . . . . . . . . . . . . . . . . . 2.3 Multiplikation von Zahlen nach der Schulmethode . . . . . . . . . . . . . 1 2 2 2 3 Karatsuba-Algorithmus 3.1 Karatsuba-Algorithmus für vierstellige Zahlen . . . . . . . . . . . . . . . . 3.2 Karatsuba-Algorithmus für beliebig lange Zahlen . . . . . . . . . . . . . . 3 4 5 4 Fazit 5 1 Einleitung Dieser Vortrag behandelt die Multiplikation langer Zahlen und vergleicht die gängige Art der Multiplikation, welche wir hier als Schulmethode bezeichnen, mit der Methode von Karatsuba (veröffentlicht 1962)unter dem Aspekt des Aufwands. Den Aufwand einer Rechnung bemessen wir wie üblich durch die Anzahl an Grundoperationen der Ziffern, welche im Folgenden analysiert werden. Hierbei werden wir die Anzahl and Grundmultiplikationen sowie der Additionen vergleichen und daraus ableiten, welche der Methoden für Zahlen der Länge n geeigneter erscheint. 2 Multiplikation nach Lehrbuch Um den Aufwand von zwei beliebig langen Zahlen zu erfassen, muss zuallererst der Aufwand bei der Multiplikation und Addition zweier Ziffern betrachtet werden: Zwei Ziffern x und y können problemlos in einem Schritt zu einem Produkt u und v zusammengefasst werden: x ∗ y = 10 ∗ u + v (Beispiel: 4 ∗ 8 = 32 = 10 ∗ 3 + 2) Dasselbe ist im Falle der Addition möglich: x + y + z = 10 ∗ u + v 1 2.1 Addition langer Zahlen Der Aufwand der Addition zweier Zahlen a und b hängt von ihrer Länge ab. Zur Vereinfachung werden zwei Zahlen der Länge n gewählt. Sollte eine der Zahlen kürzer sein, werden vorne einfach hinreichend viele Nullen angefügt, um die Länge anzugleichen. Dann werden die Zahlen untereinander geschrieben und wie gewöhnlich Spalte für Spalte, Ziffer für Ziffer addiert, wobei das Ergebnis 10u + v aufgeteilt werden, u als Übertrag und v als Ergebnisziffer. + 4321 5678 9999 So gehen wir von rechts nach links alle n Spalten durch und fügen ggf. den letzten Übertrag ohne weitere Rechnung hinzu. So kommen wir auf n Rechenoperationen, eine pro Spalte. 2.2 Multiplikation von Zahlen mit Ziffern Um den Aufwand für die Multiplikation zweier Zahlen abschätzen zu können, betrachten wir die Aufgabe Zahl mal Ziffer. Wir rechnen wieder von rechts nach links und schreiben unser Ergebnis in der Form 10u + v unter der jeweiligen Ziffer auf. 2234*7 28 210 1400 14000 15638 Für jede der n Ziffern der Zahl a führen wir eine Ziffern-Multiplikation durch, danach n+1 Additionen minus einer Spalte, da in der rechtesten Spalte nur eine Ziffer stehen kann. Somit kommen wir auf 2n Grundoperationen. 2.3 Multiplikation von Zahlen nach der Schulmethode Jetzt zwei lange Zahlen a und b: Für jede Ziffer y der Zahl b müssen wir die Zahl a*y berechnen, was wir gerade angeführt haben. Da b gegebener weise n Ziffern hat führen wir die Operation SZahl mal Zifferßomit n-mal durch. Wir kommen also auf n(2n) Operationen für die Teilprodukte. 5678*4321 22712000 01703400 00113560 00005678 24534638 2 Um die verbliebenen Teilprodukte zu addieren, fügen wir an den leeren Stellen Nullen ein. Dadurch entstehen n Zahlen mit je n Ziffern, die wir wie weiter oben addieren können. Die erste Zeile zur Zweiten, das Ergebnis zur Dritten und so weiter. Das sind n-1 Additionen langer Zahlen und das ergibt bei den Zahlen a und b maximal 2n Ziffern (wenn die längere n Ziffern hat). Die Addition positiver Zahlen erbringt immer größere Ergebnisse, niemals kleinere, somit ist jedes Zwischenergebnis immer kleiner als 2n Ziffern. Daraus folgt, dass jede einzelne Addition der Zwischenergebnisse maximal aus 2n Grundoperationen besteht. Also führen wir n-1 Operationen mit je maximalem Aufwand von 2n durch, das macht (n − 1) ∗ 2n = 2n2 − 2n Grundoperationen. Hinzu kommen 2n2 Grundoperationen für die Berechnung der Zwischenergebnisse, insgesamt dann 4n2 − 2n Grundoperationen. Konkret bedeutet das quadratischen Aufwand. 3 Karatsuba-Algorithmus Wir haben den Aufwand der bewährten Methode abgeschätzt und versuchen nun einen Weg zu finden, der weniger als n2 Grundoperationen benötigt. Dazu schauen wir uns die nach dem russischen Mathematiker Anatolij Alexejewitsch Karatsuba benannte Methode an. Diese zerlegt Zahlen bei der Multiplikation in kleinere, um sich so rekursiv bis zum Fall n = 2 zu arbeiten. Dazu einige Beispiele: n=1 n=2 8 ∗ 4 = 32 a = 10p + q; b = 10r + s Seien a = 78 und b = 21, so lautet die Zerlegung in Ziffern p = 7 und q = 8 sowie r = 2 und s = 1. In Ziffern ausgedrückt bedeutet das: a ∗ b = (p ∗ 10 + q) ∗ (r ∗ 10 + s) = (p ∗ r) ∗ 100 + (p ∗ s + q ∗ r) ∗ 10 + q ∗ s Für das Beispiel ist dann: 78 ∗ 21 = 7 ∗ 2 ∗ 100 + (7 ∗ 1 + 8 ∗ 2) ∗ 10 + 8 ∗ 1 = 1638. Hier wird eine Multiplikation der zweistelliger Zahlen a und b in vier Multiplikationen einstelliger Zahlen zerlegt und diese Ergebnisse werden addiert. Das sind genauso viele Grundoperationen, wie in der Schulmethode, jedoch kann hier das Folgende erkennen: (zur Erinnerung: a = 10p + q; b = 10r + s) u=p∗r v = (q − p) ∗ (s − r) w =q∗s Im Falle von v werden hier zwei Ziffernsubtraktionen vorgenommen, wodurch negative Vorzeichen entstehen können. Diese Berechnungen helfen uns jedoch aufgrund folgender 3 Gleichung: u + w − v = p ∗ r + q ∗ s − (q − p) ∗ (s − r) = p ∗ s + q ∗ r Das alles nützt uns, da nun auch gilt: a ∗ b = u ∗ 102 + (u + w − v) ∗ 10 + w In unserem Beispiel: u = 7 ∗ 2 = 14 v = (8 − 7) ∗ (1 − 2) = −1 w =8∗1=8 78 ∗ 21 = 14 ∗ 102 + 14 + 8 + 1) ∗ 10 + 8 = 1400 + 230 + 8 = 1638 Daraus ergeben sich nun drei statt vier Ziffernmultiplikationen und einige Additionen sowie Subtraktionen, um die Teilergebnisse zusammenzusetzen. 3.1 Karatsuba-Algorithmus für vierstellige Zahlen Wenden wir den Algorithmus nun auf vierstellige Zahlen an. Wir betrachten a und b nun als vierstellige Zahlen, die wir jeweils in zwei zweistellige Zahlen zerlegen: a = p ∗ 102 + q; b = r ∗ 102 + s Damit machen wir exakt dasselbe wie zuvor bei den zweistelligen Zahlen, wir definieren u,v und w und erhalten wie zuvor dasselbe Produkt: a ∗ b = u ∗ 104 + (u + w − v) ∗ 102 + w Ein weiteres Beispiel: (a = 5678, b = 4321) u = 56 ∗ 43 = 2408 v = (78 − 56) ∗ (21 − 43) = −484 w = 78 ∗ 21 = 1638 5678 ∗ 4321 = 2408 ∗ 10000 + (2408 + 1638 + 484) ∗ 100 + 1638 = 24534638 Um auf dieses Ergebnis zu kommen, haben wir drei Produkte zweistelliger Zahlen berechnet. Den Aufwand davor haben wir zuvor erfasst. Für jedes Hilfsprodukt brauchen wir drei Multiplikationen, insgesamt also 3 ∗ 3 = 9 Multiplikationen sowie mehrere Additionen und Subtraktionen. Das sind bedeutend weniger als in der Schulmethode. 4 3.2 Karatsuba-Algorithmus für beliebig lange Zahlen Dieses Prinzip kann offensichtlich beliebig fortgeführt werden für 8, 16 und der 2er Potenz folgend beliebig lange Zahlen. Allgemein formuliert können wir die Karatsuba-Methode wie folgt beschreiben: Zwei Zahlen a und b der Länge n = 2 ∗ 2 ∗ 2... = 2k teilen wir in a = p ∗ 10n/2 + q und b = r ∗ 10n/2 + s und berechnen das mit drei Multiplikationen der Länge 2k−1 in der Art: a ∗ b = p ∗ r ∗ 10n + (p ∗ r + q ∗ s − (q − p) ∗ (s − r)) ∗ 10n/2 + q ∗ s. So sparen wir uns die Ziffernmultiplikation einer Zahl der Länge 2k−1 (drei statt vier). So ergibt sich die folgende Tabelle, in welcher wir die Länge einer Zahl mit der Anzahl an Multiplikationen der Karatsuba- und der Schulmethode vergleichen: Länge n 1 2 4 8 16 32 64 128 256 512 1.024 ... 1.048.576=220 ... 2k Karatsuba 1 3 9 27 81 243 729 2.187 6.561 19.638 59.049 ... 3.486.784.401 ... 3k Schulmethode 1 4 16 64 256 1.024 4.096 16.384 65.536 262.144 1.048.576 ... 1.099.511.627.776 ... 4k Durch Umformung mithilfe des Logarithmus zur Basis 2 kommt man auf: 4k = 4log(n) = (2log(4) )log(n) = nlog(4) = n2 3k = 3log(n) = (2log(3) )log(n) = nlog(3) = n1,58... 4 Fazit Abschließend bleibt zu bemerken, dass hier ausschließlich Zahlen der Länge 2k betrachtet wurden. Möchten wir nun zwei Zahlen mit je einer Millionen Ziffern, so benötigt die Schulmethode eine Billionen Ziffernmultiplikationen. Für Karatsuba müssen müssen wir zuerst so viele Nullen vorn an die Zahlen anhängen, dass die Zahlen eine Länge n = 2k 5 (haben, da sonst in den einzelnen Multiplikationen die Länge der Zahlen nicht bis 1 halbiert werden können; selbst dann brauchen wir nur dreieinhalb Milliarden Grundmultiplikationen. Das entspricht ungefähr einem 300-tel. Weiterhin haben wir bei der Betrachtung der Karatsuba-Methode die Addition und Subtraktion vernachlässigt. Hierbei handelt es sich bei der Länge n um 4 Additionen bzw. Subtraktionen n/2-stelliger Zahlen mit eventuellen Überträgen. Der Aufwand hier verhält sich also linear und ist für größere n in diesem Rahmen vernachlässigbar. 6