Multiplikationsalgorithmus

Ein Multiplikationsalgorithmus ist ein Algorithmus (oder Methode), um zwei Zahlen zu multiplizieren. Abhängig von der Größe der Zahlen sind verschiedene Algorithmen im Gebrauch. Effiziente Multiplikationsalgorithmen haben seit dem Advent des dezimalen Systems bestanden.

Bratrost-Methode

Die Bratrost-Methode (oder Kasten-Methode) sind eine einleitende Methode für die vielfach-stellige Multiplikation, die häufig Schülern am Grundschul- oder Grundschule-Niveau unterrichtet wird. Es ist ein Standardteil des nationalen Grundschulmathematik-Lehrplans in England und Wales seit dem Ende der 1990er Jahre gewesen.

Sowohl Faktoren werden ("verteilt") in ihre Hunderte, Zehnen als auch Einheitsteile zerbrochen, und die Produkte der Teile werden dann ausführlich in einer relativ einfachen Multiplikation-Only-Bühne berechnet, bevor auf diese Beiträge dann belaufen wird, um die Endantwort in einer getrennten Hinzufügungsbühne zu geben.

So zum Beispiel die Berechnung 34 × 13 konnte mit dem Bratrost geschätzt werden

40

90

+ 12

----

442 </pre>

:

gefolgt von der Hinzufügung, um 442, irgendein in einer einzelnen Summe vorzuherrschen (sieh Recht), oder durch das Formen der Reihe-für-Reihe-Summen (300 + 40) + (90 + 12) = 340 + 102 = 442.

Diese Berechnungsannäherung (obwohl nicht notwendigerweise mit der ausführlichen Bratrost-Einordnung) ist auch bekannt als der teilweise Produktalgorithmus. Seine Essenz ist die Berechnung der einfachen Multiplikationen getrennt mit der ganzen Hinzufügung, die zum Endaufnehmen der Bühne wird verlässt.

Die Bratrost-Methode kann im Prinzip auf Faktoren jeder Größe angewandt werden, obwohl die Zahl von Subprodukten beschwerlich als die Zahl von Ziffer-Zunahmen wird. Dennoch wird es als eine nützlich ausführliche Methode gesehen, die Idee von vielfach-stelligen Multiplikationen einzuführen; und in einem Alter, wenn die meisten Multiplikationsberechnungen mit einer Rechenmaschine oder einem Spreadsheet getan werden, kann es in der Praxis der einzige Multiplikationsalgorithmus sein, den einige Studenten jemals brauchen werden.

Lange Multiplikation

Wenn ein Stellungsziffer-System verwendet wird, wird eine natürliche Weise, Zahlen zu multiplizieren, in Schulen unterrichtet

als lange Multiplikation, manchmal genannt Grundschule-Multiplikation, manchmal genannt Standardalgorithmus:

multiplizieren Sie durch jede Ziffer und dann zählen Sie alle richtig ausgewechselten Ergebnisse zusammen. Es verlangt memorization der Multiplikationstabelle für einzelne Ziffern.

Das ist der übliche Algorithmus, um größere Zahlen mit der Hand in der Basis 10 zu multiplizieren. Computer verwenden normalerweise eine sehr ähnliche Verschiebung und fügen Algorithmus in der Basis 2 hinzu. Eine Person, die lange Multiplikation auf Papier tut, wird alle Produkte niederschreiben und sie dann zusammen hinzufügen; ein Rechenmaschine-Benutzer wird die Produkte summieren, sobald jeder geschätzt wird.

Beispiel

Dieses Beispiel verwendet lange Multiplikation, um 23,958,233 (multiplicand) um 5,830 (Vermehrer) zu multiplizieren, und erreicht 139,676,498,390 für das Ergebnis (Produkt).

23958233

5830 ×

------------

00000000 (= 23,958,233 × 0)

71874699 (= 23,958,233 × 30)

191665864 (= 23,958,233 × 800)

119791165 (= 23,958,233 × 5,000)

------------

139676498390 (= 139,676,498,390)

Raumkompliziertheit

Lassen Sie n die Gesamtzahl von Bit in den zwei Eingangszahlen sein. Lange Multiplikation hat den Vorteil, dass es als ein Klotz-Raumalgorithmus leicht formuliert werden kann; d. h. ein Algorithmus, der nur Arbeitsraum braucht, der zum Logarithmus der Zahl von Ziffern im Eingang proportional ist (Θ (loggen n)). Das ist der doppelte Logarithmus der Zahlen, die selbst multiplizieren werden (Klotz loggen N). Wir schließen den Eingang oder die Produktionsbit in diesem Maß nicht ein, da das die Raumvoraussetzung geradlinig trivial machen würde; stattdessen machen wir die Eingangsbit read-only- und das Produktionsbit-nur Schreiben. (Das bedeutet gerade, dass eingibt und Produktionsbit nicht aufgezählt werden, wie wir nur gelesen - UND writable Bit zählen.)

Die Methode ist einfach: Wir fügen das Säulenrecht-zu-link, Nachgehen des Tragens hinzu, als wir gehen. Wir müssen die Säulen nicht versorgen, um das zu tun. Um das zu zeigen, lassen Sie das Ith-Bit vom Recht auf den ersten und zweiten operands a und b beziehungsweise angezeigt werden, sowohl an mir = 0 anfangend, als auch r das Ith-Bit vom Recht auf das Ergebnis sein lassen. Dann

:

wo c das Tragen aus der vorherigen Säule ist. Vorausgesetzt dass weder c noch die Gesamtsumme Klotz-Raum überschreiten, können wir diese Formel im Klotz-Raum, seit den Indizes j und k durchführen jeder hat O (loggen Sie n) Bit.

Ein einfaches induktives Argument zeigt, dass das Tragen n nie überschreiten kann und die Gesamtsumme für r 2n nie zu weit gehen kann: Das Tragen in die erste Säule ist Null, und für alle anderen Säulen, es gibt an den meisten n Bit in der Säule und einem Tragen am grössten Teil von n, der aus der vorherigen Säule (durch die Induktionsvoraussetzung) eingeht. Ihre Summe ist höchstens 2n, und das Tragen zur folgenden Säule ist am grössten Teil der Hälfte davon oder n. So können beide diese Werte in O versorgt werden (loggen Sie n) Bit.

Im Pseudocode ist der mit dem Klotzraumalgorithmus:

multiplizieren Sie ([0.. n1], b [0.. n1])//Reihe, die die binären Darstellungen vertritt

x  0

weil ich von 0 bis 2n1

für j von max (0, i+1n) zur Minute (ich, n1)//Säulenmultiplikation

k  i  j

x  x + ([j] &times; b [k])

Ergebnis [ich]  x mod 2

x  Fußboden (x/2)

Elektronischer Gebrauch

Einige Chips führen diesen Algorithmus für die verschiedene ganze Zahl und Schwimmpunkt-Größen in der Computerhardware oder im Mikrocode durch. In der Arithmetik der willkürlichen Präzision ist es üblich, lange Multiplikation mit dem Grundsatz zu 2 zu verwenden, wo w die Zahl von Bit kurzum ist, um relativ kleine Zahlen zu multiplizieren.

Um zwei Zahlen mit n Ziffern mit dieser Methode zu multiplizieren, braucht man über n Operationen. Mehr formell: Mit einer natürlichen der Zahl von Ziffern metrischen Größe ist die Zeitkompliziertheit, zwei n-digit Zahlen mit der langen Multiplikation zu multiplizieren, Θ (n).

Wenn durchgeführt, in der Software müssen sich lange Multiplikationsalgorithmen mit Überschwemmung während Hinzufügungen befassen, die teuer sein können. Deshalb soll eine typische Annäherung die Zahl in einer kleinen Basis b solch vertreten, dass, zum Beispiel, 8b eine wiederpräsentable ganze Maschinenzahl ist (zum Beispiel, hat Richard Brent diese Annäherung in seinem Paket-Abgeordneten von Fortran verwendet); wir können dann mehrere Hinzufügungen vor der Notwendigkeit durchführen, uns mit Überschwemmung zu befassen. Wenn die Zahl zu groß wird, fügen wir einen Teil davon zum Ergebnis hinzu oder tragen und stellen den restlichen Teil zurück zu einer Zahl weniger kartografisch dar als b; dieser Prozess wird Normalisierung genannt.

Multiplikationsalgorithmus von Sunzi

Sunzi Mathematischer Klassiker 400AD ausführlich berichtet nach und nach Multiplikationsalgorithmus mit der Rechnung von Rod

Algorithmus von Sunzi mulitplication wurde zuerst in arabische Länder von Al Khwarizmi in seinem Buch über Indianerarithmetics eingeführt; später auch erschienen im 1011. Jahrhundert das Buch von Kushyar ibn Labban Grundsatz des hinduistischen Rechnens.

Gitter-Multiplikation

Gitter oder Sieb, Multiplikation ist zur langen Multiplikation algorithmisch gleichwertig. Es verlangt die Vorbereitung eines Gitters (ein Bratrost gestützt Papier), der die Berechnung führt und alle Multiplikationen von den Hinzufügungen trennt. Es wurde nach Europa 1202 im Liber Abaci von Fibonacci eingeführt. Leonardo hat die Operation als geistig mit seinen rechten und linken Händen beschrieben, um die Zwischenberechnungen zu tragen. Matrakçı Nasuh hat 6 verschiedene Varianten dieser Methode in diesem Buch des 16. Jahrhunderts, Umdet-ul Hisab präsentiert. Es wurde in Schulen von Enderun über das Osmanische Reich weit verwendet. Die Knochen von Napier oder die Stangen von Napier haben auch diese Methode, wie veröffentlicht, durch Napier 1617, das Jahr seines Todes verwendet.

Wie gezeigt, im Beispiel werden der multiplicand und Vermehrer oben und rechts von einem Gitter oder einem Sieb geschrieben. Es wird in "der Arithmetik" von Muhammad ibn Musa al-Khwarizmi, einer der Quellen von Leonardo gefunden, die von Sigler, Autor des "Liber Abaci von Fibonacci", 2002 erwähnt sind.

  • Während der Multiplikationsphase wird das Gitter mit zweistelligen Produkten der entsprechenden Ziffern ausgefüllt, die jede Reihe und Säule etikettieren: Die Zehnen-Ziffer geht in die spitzenlinke Ecke hinein.
  • Während der Hinzufügungsphase wird das Gitter auf den Diagonalen summiert.
  • Schließlich, wenn eine tragen Phase notwendig ist, wird die Antwort, wie gezeigt, entlang den linken Seiten und untersten Seiten des Gitters zur normalen Form durch das Tragen der Ziffern von ten als in der langen Hinzufügung oder Multiplikation umgewandelt.

Beispiel

Die Bilder auf der richtigen Show, wie man 345 × 12 Verwenden-Gitter-Multiplikation berechnet. Als ein mehr kompliziertes Beispiel, denken Sie das Bild unter dem Anzeigen der Berechnung von 23,958,233 multiplizierten durch 5,830 (Vermehrer); das Ergebnis ist 139,676,498,390. Mitteilung 23,958,233 ist entlang der Spitze des Gitters, und 5,830 ist entlang der richtigen Seite. Die Produkte füllen das Gitter, und die Summe jener Produkte (auf der Diagonale) sind entlang den linken Seiten und untersten Seiten. Dann wird auf jene Summen, wie gezeigt, belaufen.

Bauer oder binäre Multiplikation

In der Basis 2 nimmt lange Multiplikation zu einer fast trivialen Operation ab. Für jeden '1' Bit in, wechseln Sie einen passenden Betrag aus und dann summieren Sie die ausgewechselten Werte. Abhängig von der Computerverarbeiter-Architektur und Wahl des Vermehrers kann es schneller sein, um diesen Algorithmus mit der Hardware zu codieren, hat Verschiebungen gebissen und trägt bei, aber nicht hängen Sie von Multiplikationsinstruktionen ab, wenn der Vermehrer befestigt wird und die Zahl dessen erforderlich beiträgt, ist klein.

Dieser Algorithmus ist auch bekannt als Bauer-Multiplikation, weil es unter denjenigen weit verwendet worden ist, die ungeschult sind und sich so die durch die lange Multiplikation erforderlichen Multiplikationstabellen nicht eingeprägt haben. Der Algorithmus war auch im Gebrauch im alten Ägypten.

Auf Papier, schreiben Sie in einer Säule die Zahlen nieder, die Sie bekommen, wenn Sie wiederholt den Vermehrer halbieren, den Rest ignorierend; in einer Säule daneben verdoppeln wiederholt den multiplicand. Streichen Sie jede Reihe aus, in der die letzte Ziffer der ersten Zahl sogar ist, und fügen Sie die restlichen Zahlen in der zweiten Säule hinzu, um das Produkt zu erhalten.

Die Hauptvorteile dieser Methode bestehen darin, dass es schnell unterrichtet werden kann, ist kein memorization erforderlich, und es kann mit Jetons wie Schürstange-Chips durchgeführt werden, wenn Papier und Bleistift nicht verfügbar sind. Es macht wirklich jedoch mehr Schritte als lange Multiplikation, so kann es unhandlich sein, wenn große Anzahl beteiligt wird.

Beispiele

Dieses Beispiel verwendet Bauer-Multiplikation, um 11 um 3 zu multiplizieren, um ein Ergebnis 33 zu erreichen.

Dezimalzahl: Binär:

11 3 1011 11

5 6 101 110

2 10

1 24 1 11000

--------

33 100001

Das Beschreiben der Schritte ausführlich:

  • 11 und 3 werden oben geschrieben
  • 11 wird (5.5) halbiert, und 3 wird (6) verdoppelt. Der Bruchteil wird verworfen (5.5 wird 5).
  • 5 wird (2.5) halbiert, und 6 wird (12) verdoppelt. Der Bruchteil wird verworfen (2.5 wird 2). Die Zahl in der linken Spalte (2) ist sogar, so wird die Zahl in der richtigen Spalte (12) verworfen.
  • 2 wird (1) halbiert, und 12 wird (24) verdoppelt.
  • Alle Werte "nicht gekratzt" werden summiert: 3 + 6 + 24 = 33.

Die Methode arbeitet, weil Multiplikation, so verteilend ist:

:

\begin {richten }\aus

3 \times 11 & = 3 \times (1\times 2^0 + 1\times 2^1 + 0\times 2^2 + 1\times 2^3) \\

& = 3 \times (1 + 2 + 8) \\

& = 3 + 6 + 24 \\

& = 33.

\end {richten }\aus

</Mathematik>

Ein mehr kompliziertes Beispiel, mit den Zahlen von den früheren Beispielen (23,958,233 und 5,830):

Dezimalzahl: Binär:

5830 1011011000110

2915 47916466 101101100011 10110110110010010110110010

1457 95832932 10110110001 101101101100100101101100100

728 1011011000

364 101101100

182 10110110

91 1533326912 1011011 1011011011001001011011001000000

45 3066653824 101101 10110110110010010110110010000000

22 10110

11 12266615296 1011 1011011011001001011011001000000000

5 24533230592 101 10110110110010010110110010000000000

2 10

1 98132922368 1

------------1022143253354344244353353243222210110 (bevor tragen)

139676498390 10000010000101010111100011100111010110

Bewegen Sie sich und tragen Sie bei

Historisch haben Computer eine "Verschiebung verwendet, und fügen Sie" Algorithmus hinzu, um kleine ganze Zahlen zu multiplizieren. Beide Basis 2 lange Multiplikation und Basis 2 Bauer-Multiplikation nimmt zu diesem demselben Algorithmus ab. (Heute multiplizieren Computer normalerweise in der Basis 256. Das tauscht 64K des Gedächtnisses, um den Zeittisch für die Geschwindigkeitszunahme des im Stande Seins zu versorgen, 8 Bit in einer Operation zu tun.)

In der Basis 2, durch die einzelne Ziffer des Vermehrers multiplizierend, nimmt zu einer einfachen Reihe von logischen UND Operationen ab. Jedes teilweise Produkt wird zu einer laufenden Summe hinzugefügt, sobald jedes teilweise Produkt geschätzt wird. Zurzeit verfügbarste Mikroprozessoren führen das oder andere ähnliche Algorithmen (wie Kabine-Verschlüsselung) für die verschiedene ganze Zahl und Schwimmpunkt-Größen in Hardware-Vermehrern oder im Mikrocode durch.

Auf zurzeit verfügbaren Verarbeitern ist eine mit dem Bit kluge Verschiebeanweisung schneller als eine multiplizieren Instruktion und kann verwendet werden, um zu multiplizieren (Verschiebung verlassen) und sich zu teilen (wechseln Sie Recht aus) durch Mächte zwei. Multiplikation durch eine Konstante und Abteilung durch eine Konstante können mit einer Folge von Verschiebungen durchgeführt werden und tragen bei oder machen Abstriche. Zum Beispiel gibt es mehrere Weisen, mit 10 verwendenden nur Bit-Verschiebung und Hinzufügung zu multiplizieren.

((x

(x

</Quelle>

In einigen Fällen tragen solche Folgen von Verschiebungen und bei oder machen Abstriche wird Hardware-Vermehrer und besonders Teiler überbieten. Eine Abteilung durch mehrere Form oder kann häufig zu solch einer kurzen Folge umgewandelt werden.

Diese Typen von Folgen müssen immer für Computer verwendet werden, die keine "multiplizieren" Instruktion haben, und auch durch die Erweiterung auf Schwimmpunkt-Zahlen verwendet werden können, wenn man die Verschiebungen durch die Berechnung 2*x als x+x ersetzt, weil diese logisch gleichwertig sind.

Multiplikation des Quarter Square

Zwei Mengen können mit Viertel-Quadraten durch die Beschäftigung der folgenden Identität multipliziert werden, die der babylonischen Mathematik (2000-1600 v. Chr.) zugeschrieben ist

:

\left\lfloor \frac {\\ist (x+y\right) ^2} {4} abgereist \right\rfloor - \left\lfloor \frac {\\ist (x-y\right) ^2} {4} \right\rfloor = abgereist

\frac {1} {4 }\\ist (\left (x^2+2xy+y^2\right) - \left (x^2-2xy+y^2\right) \right) = abgereist

\frac {1} {4 }\\ist (4xy\right) = xy abgereist.

</Mathematik>

Wenn seltsam ist, dann wird auch seltsam sein, das bedeutet, dass jeder Bruchteil annullieren wird, so wird keine Genauigkeit durch die Verschrottung der Reste verloren. Unten ist eine Nachschlagetabelle von Viertel-Quadraten mit dem Rest, der für die Ziffern 0 bis 18 verworfen ist, das berücksichtigt die Multiplikation von Zahlen bis dazu.

Wenn, zum Beispiel, Sie 9 um 3 haben multiplizieren wollen, bemerken Sie, dass die Summe und der Unterschied 12 und 6 beziehungsweise sind. Das Aufblicken tragen sowohl jene Werte auf dem Tisch 36 als auch 9, dessen Unterschied 27 ist, der das Produkt 9 und 3 ist.

Antoine Voisin hat einen Tisch von Viertel-Quadraten von 1 bis 1000 1817 als eine Hilfe in der Multiplikation veröffentlicht. Ein größerer Tisch von Viertel-Quadraten von 1 bis 100000 wurde von Samuel Laundy 1856 und einem Tisch von 1 bis 200000 von Joseph Blater 1888 veröffentlicht.

Vermehrer des Quarter Square wurden in analogen Computern verwendet, um ein analoges Signal zu bilden, das das Produkt von zwei analogen Eingangssignalen war. In dieser Anwendung werden die Summe und der Unterschied von zwei Eingangsstromspannungen mit betrieblichen Verstärkern gebildet. Dem Quadrat von jedem von diesen wird mit piecewise geradlinige Stromkreise näher gekommen. Schließlich wird der Unterschied der zwei Quadrate gebildet und durch einen Faktor eines vierten Verwendens noch ein anderer betrieblicher Verstärker erklettert.

1980 hat Everett L. Johnson vorgehabt, die Viertel-Quadratmethode in einem Digitalvermehrer zu verwenden. Um das Produkt von zwei ganzen 8-Bit-Zahlen zum Beispiel zu bilden, bildet das Digitalgerät die Summe und den Unterschied, schlägt beide Mengen in einem Tisch von Quadraten nach, nimmt den Unterschied der Ergebnisse, und teilt sich durch vier durch die Verschiebung von zwei Bit nach rechts. Für ganze 8-Bit-Zahlen wird der Tisch von Viertel-Quadraten 2 Einträge von 16 Bit jeder haben.

Die Vermehrer-Technik des Quarter Square hat auch 8-Bit-Systemen genützt, die keine Unterstützung für einen Hardware-Vermehrer haben. Steven Judd hat das für die 6502 durchgeführt.

Schnelle Multiplikationsalgorithmen für große Eingänge

Der komplizierte Multiplikationsalgorithmus von Gauss

Komplizierte Multiplikation ist normalerweise mit vier Multiplikationen verbunden. Vor 1805 hatte Gauss eine Weise entdeckt, die Anzahl von Multiplikationen zu drei zu vermindern.

Das Produkt (+ bi) · (c + di) kann folgendermaßen berechnet werden.

:k = c · (+ b)

:k = a · (d &minus; c)

:k = b · (c + d)

:Real-Teil = k &minus; k

:Imaginary-Teil = k + k.

Dieser Algorithmus verwendet nur drei Multiplikationen, aber nicht vier, und fünf Hinzufügungen oder Subtraktionen aber nicht zwei. Wenn ein Multiplizieren teurer ist als drei, trägt bei oder, macht als Abstriche, wenn man mit der Hand rechnet, dann gibt es einen Gewinn in der Geschwindigkeit. Auf modernen Computern können ein Multiplizieren und ein Hinzufügen über dieselbe Zeit nehmen, also kann es keinen Geschwindigkeitsgewinn geben. Es gibt einen Umtausch, in dem es einen Verlust der Präzision geben kann, wenn es verwendet, Punkt schwimmen lassend.

Weil sich schneller Fourier verwandelt, multipliziert der Komplex schließen unveränderlich ein 'spielen' mit Faktoren 'herum', und zwei des Hinzufügens kann vorgeschätzt werden. Nur drei multiplizieren, und drei trägt bei sind erforderlich, und moderne Hardware kann häufig überlappen multipliziert und trägt bei.

Multiplikation von Karatsuba

Für Systeme, die Zahlen im Rahmen mehrerer tausend Ziffern, wie Computeralgebra-Systeme und bignum Bibliotheken multiplizieren müssen, ist lange Multiplikation zu langsam. Diese Systeme können Multiplikation von Karatsuba verwenden, die 1960 (veröffentlicht 1962) entdeckt wurde. Das Herz der Methode von Karatsuba liegt in der Beobachtung, dass zweistellige Multiplikation mit nur drei aber nicht den vier klassisch erforderlichen Multiplikationen getan werden kann. Nehmen Sie an, dass wir zwei 2-stellige Zahlen multiplizieren wollen: xx · yy:

  1. schätzen Sie x · y, nennen Sie das Ergebnis Einen
  2. schätzen Sie x · y, nennen Sie das Ergebnis B
  3. rechnen Sie (x + x) · (y + y), nennen Sie das Ergebnis C
  4. schätzen Sie C  Ein  B, nennen Sie das Ergebnis K; diese Zahl ist x gleich · y + x · y
  5. schätzen Sie A · 100 + K · 10 + B.

Größere Zahlen xx können in zwei Teile x und x gespalten werden. Dann arbeitet die Methode analog. Um diese drei Produkte der M stellige Zahlen zu schätzen, können wir denselben Trick wieder, effektiv mit recursion verwenden. Sobald die Zahlen geschätzt werden, müssen wir sie zusammen hinzufügen (Schritt 5.), der über n Operationen nimmt.

Multiplikation von Karatsuba hat eine Zeitkompliziertheit von O (n)  O (n), diese Methode bedeutsam schneller machend, als lange Multiplikation. Wegen der Gemeinkosten von recursion ist die Multiplikation von Karatsuba langsamer als lange Multiplikation für kleine Werte von n; typische Durchführungen schalten deshalb auf die lange Multiplikation um, wenn n unter einer Schwelle ist.

Später wurde die Methode von Karatsuba genannt 'teilen sich und siegen' sind die anderen Namen dieser Methode, die an der Gegenwart verwendet ist, 'das binäre Aufspalten' und 'der Zweiteilungsgrundsatz'.

Das Äußere der Methode 'teilt sich und siegt' war der Startpunkt der Theorie von schnellen Multiplikationen. Mehrere Autoren (unter ihnen Toom, Cook und Schönhage) haben fortgesetzt, nach einem Algorithmus der Multiplikation mit der Kompliziertheit in der Nähe von der optimalen zu suchen, und 1971 hat den Aufbau des Algorithmus von Schönhage-Strassen gesehen, der das am besten bekannte (bis 2007) ober gebunden für die M (n) aufrechterhalten hat.

Die Karatsuba 'teilen sich und siegen' ist die grundsätzlichste und allgemeine schnelle Methode. Hunderte von verschiedenen Algorithmen werden auf seiner Basis gebaut. Unter diesen Algorithmen sind die weithin bekanntsten die Algorithmen, die auf Fast Fourier Transform (FFT) und Schneller Matrixmultiplikation gestützt sind.

Toom-kochen

Eine andere Methode der Multiplikation wird Toom-Koch oder Toom-3 genannt. Die Toom-Koch-Methode spaltet jede in vielfache Teile zu multiplizierende Zahl. Die Toom-Koch-Methode ist eine der Generalisationen der Methode von Karatsuba. Ein dreiseitiger Toom-Koch kann eine Multiplikation der Größe-N für die Kosten von fünf Multiplikationen der Größe-N, Verbesserung durch einen Faktor von 9/5 im Vergleich zur Methode-Verbesserung von Karatsuba durch einen Faktor von 4/3 tun.

Obwohl das Verwenden immer mehr von Teilen die Zeit reduzieren kann, die auf rekursiven Multiplikationen weiter verbracht ist, wachsen die Gemeinkosten von Hinzufügungen und Ziffer-Management auch. Deshalb verwandelt sich die Methode von Fourier ist normalerweise für Zahlen mit mehreren tausend Ziffern, und asymptotisch schneller für noch größere Zahlen schneller.

Fourier gestaltet Methoden um

Die Idee, wegen Strassens (1968), ist der folgende: Wir wählen die größte ganze Zahl w, der Überschwemmung während des Prozesses nicht verursachen wird, der unten entworfen ist. Dann spalten wir die zwei Zahlen in die M Gruppen von w Bit

:

Wir können dann das sagen

:

durch das Setzen b = 0 und = 0 für j, i> M, k = ich + j und {c} als die Gehirnwindung und {b}. Mit dem Gehirnwindungslehrsatz kann ab durch geschätzt werden

  1. Computerwissenschaft des schnellen Fouriers verwandelt sich von und {b},
  2. Den zwei Ergebnis-Zugang mit dem Zugang, multiplizierend
  3. Die Computerwissenschaft des Gegenteils Fourier verwandelt sich und
  4. Das Hinzufügen des Teils von c, der größer ist als 2 zu c.

Eine andere Weise, diesen Prozess zu beschreiben, bildet Polynome, deren Koeffizienten die Ziffern der Eingänge (in der Basis 2) sind, sie schnell das Verwenden der Gehirnwindung durch FFT, dann das Extrahieren der Koeffizienten des Ergebnis-Polynoms und Durchführens des Tragens multiplizierend.

Der Algorithmus von Schönhage-Strassen, beschrieben 1971 von Schönhage und Strassen, hat eine Zeitkompliziertheit von Θ (n Klotz (n) Klotz (Klotz (n))) und wird in der Praxis für Zahlen mit mehr als 10,000 bis 40,000 dezimalen Ziffern verwendet. 2007 wurde das von Martin Fürer (der Algorithmus von Fürer) verbessert, um eine Zeitkompliziertheit des N-Klotzes (n) das 2 Verwenden zu geben, das Fourier über komplexe Zahlen umgestaltet. Anindya De, Chandan Saha, Piyush Kurur und Ramprasad Saptharishi haben einen ähnlichen Algorithmus mit der Modularithmetik gegeben, 2008 dieselbe Laufzeit erreichend. Jedoch sind diese letzten Algorithmen nur schneller als Schönhage-Strassen für unpraktisch große Eingänge.

Das mit der Zahl theoretische Verwenden verwandelt sich statt getrennten Fouriers verwandelt sich vermeidet Rundungsfehler-Probleme durch das Verwenden der Modularithmetik statt der Fließkommaarithmetik.

Geradlinige Zeitmultiplikation

Knuth beschreibt rechenbetonte Modelle, in denen Zwei-N-Bit-Zahlen in der geradlinigen Zeit multipliziert werden können. Der realistischste von diesen verlangt, dass auf jede Speicherposition in der unveränderlichen Zeit (das so genannte RAM-Modell) zugegriffen werden kann. Die Annäherung soll gestützte Methode des FFT verwenden, die oben beschrieben ist, Klotz n Bit in jeden Koeffizienten der Polynome einpackend und die ganze Berechnung mit 6 Klotz n Bit der Genauigkeit tuend. Die Zeitkompliziertheit ist jetzt O (nM), wo M die Zeit ist, musste zwei multiplizieren loggen n - Bit-Zahlen. Durch die Vorcomputerwissenschaft einer geradlinigen Größe-Multiplikationsnachschlagetabelle aller Paare von Zahlen dessen (loggen n),/2 Bit ist M einfach die Zeit musste eine unveränderliche Zahl des Tisches lookups durchführen. Wenn man annimmt, dass das pro Tisch lookup Zeit in Anspruch nimmt, wie im Einheitskoste-Wort-RAM-Modell wahr ist, dann ist der gesamte Algorithmus geradlinige Zeit.

Niedrigere Grenzen

Es gibt einen trivialen, der tiefer Ω (n) gebunden ist, um Zwei-N-Bit-Zahlen auf einem einzelnen Verarbeiter zu multiplizieren; kein zusammenpassender Algorithmus (auf herkömmlichen Maschinen von Turing) noch sinkt etwas besser gebunden ist bekannt. Multiplikation liegt außerhalb AC [p] für jeden ersten p, bedeutend, dass es keine Familie der unveränderlichen Tiefe, Polynom (oder sogar Subexponential-) das Größe-Stromkreis-Verwenden UND, ODER, NICHT, und MOD Tore gibt, die ein Produkt schätzen können. Das folgt aus der Verminderung der unveränderlichen Tiefe von MOD zur Multiplikation. Niedrigere Grenzen für die Multiplikation sind auch für einige Klassen von sich verzweigenden Programmen bekannt.

Polynomische Multiplikation

Alle obengenannten Multiplikationsalgorithmen können auch ausgebreitet werden, um Polynome zu multiplizieren. Zum Beispiel kann der Algorithmus von Strassen für die polynomische Multiplikation verwendet werden

Siehe auch

  • Binärer Vermehrer
  • Abteilung (digitaler)
  • Logarithmus
  • Geistige Berechnung
  • Prosthaphaeresis
  • Rechenschieber
  • System von Trachtenberg
  • Schema von Horner für die Einschätzung eines Polynoms

Links

Grundlegende Arithmetik

Fortgeschrittene Algorithmen


Sisal / Rambutan
Impressum & Datenschutz