Multiplikation langer Zahlen

Werbung
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
Herunterladen