Warum ist die Transformation im Schönhage-Strassen-Multiplikationsalgorithmus billig?


8

Der Schönhage-Strassen Multiplikation Algorithmus arbeitet durch Multiplikationen der Größe Drehen in viele Multiplikationen Größe mit einer zahlentheoretischen Transformation und recursing. Zumindest denke ich, dass es das ist, weil es eine andere Klugheit gibt und ich es wirklich nicht gut genug verstehe, um es genau zusammenzufassen. Es endet in der Zeit .Nlg(N)O(Nlg(N)lg(lg(N)))

Eine zahlentheoretische Transformation ist genau wie eine diskrete Fourier-Transformation , außer dass sie im endlichen Feld von ganzen Zahlen modulo . Dies macht die Operationen viel billiger, da die Fourier-Transformation viel mit den Wurzeln der Einheit multipliziert wird und die Wurzeln der Einheit von alle Potenzen von 2 sind, so dass wir uns einfach verschieben können! Ganzzahlen sind außerdem viel einfacher zu verarbeiten als komplexe Gleitkommazahlen.F2N+12N+1F2N+1

Was mich verwirrt, ist, dass sehr groß ist. Wenn ich Ihnen ein zufälliges Element aus gebe , sind Bits erforderlich, um es anzugeben. Das Hinzufügen von zwei Elementen sollte also dauern . Und die DFT fügt viel hinzu.F2N+1F2N+1O(N)O(N)

Schönhage-Strassen teilt die Eingabe in Gruppen mit Bits auf. Diese Gruppen sind die Werte von , die transformiert werden. Jeder Durchgang der DFT hat Additionen / Subtraktionen, und es gibt Durchgänge. Basierend auf der Addition, die Zeit benötigt, scheinen die Kosten für all diese Additionen , was asymptotisch dasselbe ist wie .Nlg(N)lg(N)F2N+1O(Nlg(N))O(lg(Nlg(N)))O(N)O(NNlg(N)lg(Nlg(N)))O(N2)

Wir können es ein bisschen besser machen ... weil die Werte so klein anfangen, sind die Ergänzungen ziemlich spärlich. Die Hinzufügung des ersten Durchgangs kostet wirklich nur jeweils , und der zweite Durchgang kostet jeweils , und der i-te Durchgang kostet jeweils, aber das ergibt immer noch alles einen schrecklichen .O(lg(N))21O(lg(N))O(min(N,2ilg(N)))N2lg(N)

Wie macht Schönhage-Strassen die Ergänzungen billig? Wie viel kosten sie insgesamt?

Liegt es daran, dass der Algorithmus tatsächlich (wobei garantiert eine Potenz von 2 ist)? Es gibt genug gestapelte und Deutsch in der Zeitung, dass ich mir wirklich nicht sicher bin. Andererseits denke ich nicht, dass dies genug Wurzeln der Einheit garantiert, damit die Dinge klappen können.FN+1N22n


Hast du den Wikipedia-Artikel gelesen? Zumindest ist es nicht auf Deutsch. Laut Wikipedia wird die Größe bei jedem Schritt von auf reduziert , was seitdem ergibt . NnNn2=Θ(N)
Yuval Filmus

@Yuval Wo sehen Sie im Artikel? Es gibt viele "primitive Wurzeln" und einen zusätzlichen Optimierungstrick mit Quadratwurzeln, aber sonst sehe ich es nicht. Ich sehe " Teilen Sie jede Eingangsnummer in Vektoren X und Y von jeweils Teilen, wobei N teilt", aber keine Definition von . nN2k2kk
Craig Gidney

@Yuval Das scheint zu helfen ... aber es gibt immer noch Ergänzungen pro Durchgang mit jeder Kosten . Ein Pass kostet also , was besser, aber nicht gut genug ist. O(N)O(N)O(N32)
Craig Gidney

1
Die Einstellung von erscheint im Satz "Die optimale Anzahl von Teilen, in die die Eingabe unterteilt werden soll, ist proportional zu ." Der Wert von ist dann , sodass jede Addition kostet . kNn2Θ(N)+1O(N)
Yuval Filmus

Antworten:


5

Laut Wikipedia-Artikel wird bei jedem Schritt die Länge der ganzen Zahlen von reduziertN zu (grob) Nund es gibt (ungefähr) N von ihnen, und so kosten die Ergänzungen nur O(N). Im letzten Absatz des verknüpften Abschnitts finden Sie eine detaillierte Analyse der Laufzeit, die hier kopiert wird, falls sie sich ändert:

Im rekursiven Schritt wird die Beobachtung verwendet, dass:

  • Jedes Element der Eingabevektoren hat höchstens N/2k Bits;
  • Das Produkt von zwei beliebigen Eingabevektorelementen hat höchstens 2N/2k Bits;
  • Jedes Element der Faltung ist die Summe von höchstens 2k solche Produkte, und so kann nicht überschreiten 2N/2k+k Bits.

Hier N ist die aktuelle Eingangslänge und k=Θ(N). Arithmetik wird modulo gemacht2n+1, wo n ist ein Vielfaches von 2k das ist größer als 2N/2k+k;; beachten Sie, dassn=Θ(N).


Ich verstehe nicht, warum jedes Element der Faltung nicht überschreiten kann 2N2k+kBits. Ich verstehe, wenn wir sie nur ohne Verschiebung addieren würden, wären sie nicht größer als das, aber rechnen wir nicht inF2N+1und Skalieren von Dingen mit riesigen Potenzen von 2? DasNDas Element der Faltung ist i=0Nxi2iN, die Kraft zu steigern N Für jedes Element kann es also nicht fehlen, dass sich die Bits überhaupt überlappen und erforderlich sind NBits?
Craig Gidney

Sind die Ergänzungen in F2N+1? Der Artikel sagt "es ist notwendig, ein kleineres N für rekursive Multiplikationen zu verwenden", aber es ist nicht klar, ob dieser Schritt sowohl für die Transformation als auch für die punktweisen Multiplikationen oder nur für die punktweisen Multiplikationen durchgeführt wird.
Craig Gidney

Der Wikipedia-Artikel verwechselt N und n;; hoffentlich ist das in meiner überarbeiteten Antwort behoben. Arithmetik wird modulo gemacht2n+1, wo n=Θ(N). Der resultierende Vektor kann dann kombiniert werden, um ein Ergebnismodulo zu ergeben2N+1.
Yuval Filmus

Der Trick besteht darin, das arithmetische Modulo mit einem kleineren Modul durchzuführen, dessen Größe mit der Größe der Teile kompatibel ist. DasN-Bit-Ganzzahlen werden grob geschnitten N Stücke der Länge NBits.
Yuval Filmus

Ah, das erklärt es dann. Das würde das bedeutenlg(n) Version ist auch ziemlich schnell, da es hat lg(n)Größe Operationen. Wenn Sie das in Ihrer Antwort ausdrücklich sagen könnten, wäre das großartig.
Craig Gidney

3

In der Dokumentation zu GMP finden Sie eine hervorragende Erklärung, was genau vor sich geht, einschließlich der Größe des Feldes im Laufe der Zeit : 15.1.6 FFT-Multiplikation .

Eine theoretisch ausführlichere Übersicht beginnt auf Seite 55 von Modern Computer Arithmetic (pdf) (nun ... der Browser sagt Seite 71, aber die Seite selbst sagt 55). Es erklärt die Richtigkeit des Algorithmus und bricht die Komplexitätsanalyse auf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.