65 La mia scrittura è piana, e la speranza di costor non falla, se ben si guarda con la mente sanaa . Dante, “La divina comedia”, Purgatore, Canto VI a Das was ich schrieb liegt offen; und jenen wird die Hoffnung nicht zuschanden, wenn man gesunden Geists den Sinn getroffen. (Deutsch von R. Zoozmann), aus (Laaths, 1994) 4 Rechnen mit (univariaten) Polynomen Jetzt wollen wir uns also mit Polynomen beschäftigen. Dabei kommt es uns natürlich zugute, daß wir uns einige Sachen schon im Kontext der euklidischen Ringe angesehen haben. Trotzdem ist für Polynome trotzdem noch einiges anders. Wir werden in diesem Kapitel zumeist Polynome in betrachten, das heißt, Polynome, deren Koeffizienten “nur” in einem Ring liegen brauchen. Und das macht übrigens einen ganz gewaltigen Unterschied: ist (bekanntlich) ein euklidischer Ring, aber nicht mehr – man braucht nur mal versuchen, Division mit Rest mit den beiden Polynomen und zu betreiben 4.1 Schnelle Polynommultiplikation I – Karatsuba Das erste Verfahren zur “beschleunigten” Berechnung des Produkts zweier Polynome basiert auf einer einfachen Idee, die sich übrigens auch hinter der sogenannten schnellen Matrixmultiplikation versteckt. Multiplizieren wir nämlich zwei Polynome und , dann erhalten wir das Produkt "!#%$'& ( $*) +-, .! ( $ !/)0$*& ( 12$*&3) mit 1. den vier Multiplikationen 2. der Addition !/)576& ( . !54 ( , !54*) , &4 ( Es geht aber auch anders, nämlich mit 1. den zwei Additionen !876& , ( 76) , und &46) , 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 66 8! 4 ( , &4 ) und !87 & 4 &7 ( !04 ( &4 ) . den zwei Additionen 2. den drei Multiplikationen 3. Gut, das allein ist noch nicht so ganz der große Knaller, wird sich aber gleich als lohnend erweisen, denn jetzt kommt die zentrale Idee der meisten “schnellen” Algorithmen: Zweierpotenzen und Rekursion. und !#5$ , , , sowie & 8$ , , , , also dann . $ $ 3 Sei nämlich mal schreiben wir (4.1) und erhalten, daß . $ $ $ "! wobei wie die “Faktoren” mit drei Multiplikationen, zwei Additionen von Polynomen vom Grad , zwei Additionen von Polynomen vom Grad und drei Additionen von Polynomen vom Grad durchführen können. Nachdem der Aufwand bei der Addition zweier Polynome vom Grad aus Operationen in besteht, haben wir also einen Gesamtaufwand von $$# &%(' $$#) $* * $$# $ $+# .-, $/.102#3 4! 5 * 5 * 60 5 74! # $+#3 &8/ 5 *"! # $/9 7 9 :9 7 erhalten wir somit, daß für '; , also < +=?>:@ , erfüllt. Da 5 A ;CB 0 52A ;CD B $/9 A ;CB 0 A 52A ;ED FB $G9 A ;CD BB $G9 A ;HB 0 , , , 2 ;CD ;CD 0 ; 5 # $ I 9 A ;ED B ; 5 # $G9 A ; B I EJ EJ ; # # ; 5 # $G9 7 ! # 0 5 # KMLONQPSRTU ; $+#3 , KMLONQP R T D U ; ! 5 # KMLONQP R TUKVLONQP R U $* KWLONQP R T D UHKMLONQP R U 5 # LONQP R T $ X LONQP R T D $Y A LONQP R T B Operationen in . Außerdem müssen wir ja noch (rekursiv!) die drei Multiplikationen vom Grad durchführen, so daß unser Gesamtaufwand die Rekursionsformel also 5 * .ZY A[ LONQPFRT B]\ Y A[ Q^ _Q` B (4.2) (4.3) =?>:@ \ # Va , , haben wir jetzt also die wirklich signifikant bessere Komplexitätsschranke Da Y * Q^ _Q` für die Multiplikation zweier Polynome vom Grad ; – zum Vergleich: vorher Y war es * . Damit sieht also der Algorithmus von Karatsuba (Karatsuba & Ofman, 1963) zur schnellen Multiplikation von Polynomen wie folgt aus. 4.1 Schnelle Polynommultiplikation I – Karatsuba ; 1. Bestimme63 3E , so daß $ 67 Algorithmus 4.1 (Karatsuba–Multiplikation) Gegeben: Polynome vom Grad . ! 7 2. Berechne 3. Berechne (rekursiv) ( ) 4. Berechne 5. Berechne64 Ergebnis: , . ( $ & 7 !846& : 44 ) ) , 7 , 7 Bemerkung 4.2 1. Es sieht zuerst einmal so aus, als hätte der Karatsuba–Algorithmus nur für Zweierpotenzen die gute Komplexitätsabschätzung. Was aber, wenn keine Zweierpotenz ist? Auch nicht so schlimm, denn das sich im Intervall immer eine Zweierpotenz finden läßt65 , können wir unsere Polynome (vom gleichen Grad) einfach auf die nächste Zweierpotenz auffüllen und erhalten, daß der Aufwand mit der moderaten Konstante ist. ' ; Y 3A LONQPSRT B $Y A LONQPSRT B 0 Y A LONQPFRT B 0 2. Bei der Multiplikation zweier Polynome von signifikant verschiedenem Grad f üllt man natürlich nur auf die jeweils nächste Zweierpotenz auf und bricht ab, wenn eines der beiden Polynome konstant geworden ist, denn dann hat man es nur noch mit der Multiplikation mit einem Körperelement zu tun – eine Operation mit traditionell linearem Aufwand. 3. Man kann dieses Verfahren sofort auch in ein Multiplikationsverfahren f ür Multiprecision–Zahlen umwandeln: Hier werden dann eben die Zahlen in zwei gleichgroße Happen zerlegt, diese rekursiv multipliziert und schließlich wieder zusammengesetzt. 63 Das ist nur ein “Halbieren” der Koeffizienten, mit keinen Rechenoperationen verbunden. Jetzt bauen wir das Ergebnis zusammen! Die “Multiplikationen” mit Monomen sind wieder nur Schiebeoperationen. 65 Der Beweis ist denkbar einfach: Wir schreiben , dann ist "!#$ , oder wir bemerken, daß %&(' )*,+.-/0%1 . 64 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 68 Übung 4.1 Formulieren Sie das Karatsuba–Verfahren für die Multiplikation von Multiprecision–Zahlen. Ein analoges Verfahren gibt es übrigens auch zur Multiplikation von (Block–)Matrizen, siehe (Golub & van Loan, 1996, S. 31–33) und (ausführlicher) (Higham, 1996, S. 446–463), wobei der Trick darin besteht, die Multiplikation von –Matrizen mit anstelle von Multiplikationen zu berechnen. Zusammen mit einer rekursiven Zerlegung verringert sich dann der Aufwand von der “naiven” Methode auf ; wie man darauf kommt, dürfte jetzt nicht mehr so schwer nachzuvollziehen sein. "% . Y [A LONQP R B \ Y * ^ Q Y 7 T 4.2 Schnelle Polynommultiplikation II – DFT und FFT Das wesentliche Hilfsmittel zur schnellen Multiplikation von Polynomen wird die schnelle Fouriertransformation66 (FFT) zur Bestimmung der diskreten Fouriertransformation (DFT) einer Funktion, in diesem Fall eines Polynoms, sein. # Definition 4.3 Sei ein kommutativer Ring mit . mit , #8 # $ , , , $+ # 1. Wir betten in ein, indem wir die Zahl identifizieren. G 2. Ein Element heißt –te Einheitswurzel, wenn #. G #heißt primitiv, wenn67 kein Nullteiler in . 3. Eine –te Einheitswurzel Primfaktoren von ist Beispiel 4.4 (Einheitswurzeln) ist und wenn gilt: für alle eine achte Einheitswurzel, da 1. In ist "!$# außerdem und primitive achte Einheitswurzel. ! #- # . Da #- # # , ist auch eine Ea . Einheits- ! 2. In &%')( gibt es keine primitiven Einheitswurzeln! Zwar sind * wurzeln und zwar zweite, Z,,+ a ' a aber da 66 + . .-:, + # 0 / 1 !&%2( , brauchen wir uns für die Nullteilerfrage gar nicht interessieren. Es sollte uns inzwischen nicht mehr überraschen, daß “analytische” Verfahren auch bei “algebraischen” Problemen erfolgreich Anwendung finden - wie übrigens natürlich (!) auch umgekehrt. Mathematik als solche widersetzt sich eben doch dem Schubladendenken. 67 Im Sinne der Einbettung von Teil 1 dieser Definition. 4.2 Schnelle Polynommultiplikation II – DFT und FFT #3 #3 # " #3 69 # 3. Im Körper ist eine primitive –te Einheitswurzel. Die Zahl hingegen ist “nur” ei,+ ne primitive achte Einheitswurzel: , also . Dennoch ist natürlich 68 auch eine te Einheitswurzel , aber eben keine primitive. ! # T # eine sechste Wurzel, da69 Z, :# # _ a # 3 aber natürlich keine primitive Einheitswurzel, da weder die Potenz eine Einheit in !&% #- ( ist, und außerdem gilt für beide Primteiler von 3 , daß # 'T # # #0 # T #8 #8$, #0 und # #:# ist es noch schöner: Nullteiler, und zwar von Null verschiedene, in !&% ( sind. Bei ## T + # , ist #:# eine dritte Einheitswurzel, ist eine Einheit in &! % # - ( , aber leider da : # # # # ! trotzdem ein Nullteiler. Dasselbe gilt übrigens auch für , . ist Da & dritte und sechste Einheitswurzeln70 , aber ! % # - ( # Ca , #:*# # gibt es#also keine primitiven Einheitswurzeln in ! % ( . 4. Etwas interessanter wird es in &% ( . Hier ist # ! , 3 5. Schön langsam beginnt man zu zweifeln, ob es überhaupt primitive Einheitswurzeln in und in &% ( , etwas mehr “Nichtkörpern” gibt71 . Ein einfaches Beispiel ist *! suchen muß man für , und , sowie , in &% ( . # ! :. #% D ,* D 1.D . Jede Einheitswurzel ist eine Einheit: D D # , ist auch D eine –te Einheitswurzel. 2. Da ' 3. Auch Primitivität bleibt erhalten, da für jeden Primteiler von A D B # D A # B Bemerkung 4.5 daß bedeutet ja, und weil die rechte Seite kein Nullteiler ist, kann auch die linke Seite keiner sein. # "! In Wirklichkeit gilt aber die “kein Nullteiler”–Eigenschaft von primitiven Einheitswurzeln nicht nur für Potenzen , wobei ist, sondern für alle . G Lemma 4.6 Sei G eine primitive -te Einheitswurzel72 in . Dann gilt: Denn . . Immer modulo gesehen. 70 Und zwar echte! 71 In einem Körper ist eine Einheitswurzel der Ordnung primitiv, wenn es kein gibt, so daß $ . Die nichtprimitiven Einheitswurzeln sind also Einheitswurzeln, die durch “Potenzieren der ” entstanden sind. 72 Das soll natürlich auch automatisch unsere “Standardsituation”, daß ein kommutativer Ring mit ist implizieren. 68 69 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 70 < # F # # F # 2. Für alle < 1. Für alle ist ; # kein Nullteiler in . ID ; ! EJ ist (4.4) Beweis: Die entscheidende Beweistechik ist die einfache Identität D ! # I ! ; '! # ! (4.5) ;J # ggT <: . Da und hat mindestens Für 1. wählen wir < und setzen einen nichttrivialen Primfaktor , das heißt, es gibt eine Zahl , so daß , oder eben . Nach (4.5) ist D I ; B # A ;SJ ! # K U K U und da die rechte Seite kein Nullteiler ist, kann auch "!$# hätten wir für ein den Widerspruch # # kein Nullteiler sein, denn sonst D ! , A # B A # B I ; ! A # B ;J Um nun schließlich von zu < zu kommen wählen wir Bézout–Koeffizienten : & C< $ und ! 73. Dann ist, wieder mit (4.5), D I ; ; ; ; Q; B 0 # # 0 # # # A " " FJ J K U J J ; # ebenfalls kein Nullteiler in . also ist auch ! so daß Hier steckt auch schon die Idee für den Beweis von (4.4): Da, nochmals unter Verwendung von (4.5), ! # #8 ist und da nach Teil 1. #0 ; # D E; D E; # A ;EB ' D; #0 A ; # B I Q; E J J J kein Nullteiler ist, muß also (4.4) gelten. Jetzt aber zur Definition der diskreten Fouriertransformation. Ist ein Paar von Bézout–Koeffizienten, dann ist, für jedes !#" auch $ %'& () ein Paar von Bézout–Koeffizienten und diese Parametrisierung liefert auch alle solchen Paare. In der Wavelet–Gemeinde hat diese tiefliegende Beobachtung unter dem Namen “Lifting scheme” große Popularität erlangt. 73 4.2 Schnelle Polynommultiplikation II – DFT und FFT 71 . Dann ist die ' A A ;CB 8 < .! F # B Definition 4.7 Sei eine primitive –te Einheitswurzel und diskrete Fouriertransformation (DFT) von definiert als Bemerkung 4.8 (DFT) ! % # ( : Ist nämlich . # $ D C 1. Die DFT operiert eigentlich nur auf dann ist J A C; B ' ' ; # ) $ A ;EB A C; B J XA ;CB Mit anderen Worten74 : + D ' (4.6) 2. Damit können wir also, was die DFT angeht, für jedes Polynom die Identifizierung75 &! % # ( D verwenden. Ob wir nun das Symbol aus dem Kontext klar werden76 . ID D ; ; ;J ; 8 < (4.7) für den Vektor oder das Polynom benutzen, wird 3. Der ganze Ansatz basiert auf der Existenz von primitven ten Einheitswurzeln – und die muß ja erst mal gewährleistet sein. Tatsächlich gilt die folgende Aussage: In einem endlichen Körper , , eine Primzahl, gibt es genau dann eine primitive te Einheitswurzel, wenn . # # Wenn wir uns die DFT ansehen, dann wird also einem Polynom vom Grad ein Vektor von Funktionswerten des Polynoms zugeordnet, was schon wieder verdächtig nach Lagrange– Interpolation riecht. Und tatsächlich erhalten wir, unter Verwendung der Identifizierung (4.6), 74 Eigentlich nicht “Worten” sondern “Symbolen” Als Abkürzung für die Menge " & wird jetzt " verwendet werden. Aber nur für die Zahlenmenge. 76 Kleine Fußnote am Rande: Wie stellt man in der Praxis, am Computer, ein Polynom dar? Richtig, als Vektor seiner Koeffizienten bezüglich einer Basis – diese muß aber nicht notwendigerweise aus den Monomen bestehen. 75 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 72 daß I A A ; B 8 < B I ;S 8 < ; # # # # # D # D ' .. .. .. #. .D .. . .. .D . A ; B 8 < 8 <: ; 8 < : &8 ... Die Matrix bezeichnet man als die zugehörige Vandermonde–Matrix und ihre Inverse löst das Interpolationsproblem: Finde D so daß 8 ' ; ; , < . D 8 Proposition 4.9 Ist eine primitive –te Einheitswurzel, dann ist die Matrix invertier77 . Insbesondere kann man die inverse DFT bar und ihre Inverse ist berechnen: I ; D . D ; A A D BB ; :< Beweis: Als –te Einheitswurzel ist ja invertierbar78 , also ist ;S I ; D I ; D I (4.8) wohldefiniert. Nun ist für K ;CD U ! < / < je nachdem, ob < oder ! < D D anwenden, . Der Rest ist offensichtlich. Die Berechnung der DFT auf naive Art und Weise benötigt also Auswertungen des Poly; noms an den Stellen , < . Gemäß (4.7) können wir sogar annehmen, daß D ist79 und dann kostet uns eine Auswertung von an einer Stelle , zum Beispiel mit dem HornerY schema * Operationen im Ring – und entscheidend besser geht es auch nicht, denn jeder Koeffizient muß ja bei mindestens einer Rechenoperation mitspielen dürfen. Also kommen wir Y Operationen. bei individueller Auswertung insgesamt auf 7 D 1D was wir erhalten, indem wir (4.4) auf bzw. ist. Also ist oder eben D Und jetzt wird auch klar, warum eine Einheit in sein mußte. Siehe Bemerkung 4.5 79 Alle Terme höherer Ordnung spielen keine Rolle. 77 78 4.2 Schnelle Polynommultiplikation II – DFT und FFT 73 und G eine primitive ' D ! % # ( per Division Sei, und das sollte uns nicht mehr überraschen, jetzt wieder –te Einheitswurzel. Dann zerlegen wir das Polynom mit Rest in . A $$# B $ A # B $ D D (4.9) Diese Zerlegung ist sehr effizient zu berechnen: I ;; ; . I also ist ; R < 4! I ; ; ; R I ; ; ; ; R A ; ; B ; (4.10) < ' (4.11) < < $+# mit jeweils Operationen in zu berechnen. Setzen wir nun die –ten Potenzen von in ein und unterscheiden wir zwischen geraden ( ) und ungeraden ( ) Werten von , dann erhalten wir, daß J E ; B A * ;CB $ D A *;B # D A *;B A E ; $+# B & A *; B $ A *; B A *; B A J R J " –te Einheitswurzel ist, Im zweiten Fall haben wir berücksichtigt, daß eine primitive # kein Nullteiler in und daher haben wir, daß also ist #8 A # B A $$# B $$#0 ! ! A *;B A *; B X Als nächstes machen wir noch eine einfache aber nützliche Bemerkung. Notwendig ist diese Aussage weil wir nicht vergessen dürfen, daß zwischen dem Grad des Polynoms und der Ordnung der primitiven Einheitswurzel eine Beziehung besteht, bestehen muß, denn ist ja in beiden Fällen dasselbe Symbol und damit auch dieselbe Zahl! Und wenn wir jetzt mit zwei Polynome vom Grad haben, dann dürfen wir auch nur Einheitswurzeln der Ordnung für die DFT verwenden, denn sonst ist unsere schöne Rekursion zum Teufel. "! * "! # Da "! Lemma 4.10 Sei und eine primitive –te Einheitswurzel in primitive –te Einheitswurzel in . 74! # D D , also "! "! und nach Voraussetzung ist K U # B #0 # A B A Beweis: ist auch einzige echte Primteiler80 von und 80 Es sei denn, wir hätten , aber dann ist es noch einfacher! . Dann ist . Außerdem ist eine der 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 74 . Daß kein Nullteiler in mehr81 . # ist, bedarf ja keiner gesonderten Erwähnung * ; < 6 D *; Damit haben wir auch schon die Hälfte der Arbeit delegiert: Die Werte ' , , erhalten wir, indem wir (wieder rekursiv) die Auswertung für aufrufen. Mit den ungeraden Werte , ist das aber auch nicht viel schlimmer, da < $$# < I I A * ; B A ; ; B K *; U AA ; ; B B *;S A *;CB R ; R ist und so auch wieder rekursiv aufgerufen werden kann. Und das führt auch schon zur schnellen Fouriertransformation (FFT). Algorithmus 4.11 (FFT) , primitive –te Einheitswurzel Gegeben: 1. Berechne bzw.82 I ; R / A ; $ ; B ; ; $ ; 8 < A EB ! 2. Berechne rekursiv 3. “Mische” die Vektoren ( Ergebnis: ( 8 . ! und 2. zur Berechnung der Koeffizienten von : 4. für die Rekursion: 81 82 ; A ; ; B ; ; A ; ; B 8 < * A EB Operationen, Operationen, Weswegen wir es an dieser Stelle ja auch nicht erwähnen So würde man es wohl bei einer “praktischen” Implementierung machen. des Verfahrens. Nun, im ten Operationen, Operation, 74! # & ! E & H ! D C & D 1. zur Berechnung der Koeffizienten von : :# ; R & Bleibt also noch die Frage nach dem Rechenaufwand Schritt brauchen wir, 3. zur Berechnung von I und und D . und 4.2 Schnelle Polynommultiplikation II – DFT und FFT alles natürlich bezüglich Rechnung im Ring * 75 . Damit ist also83 $ # ' ) $ + Zum Rechnen wird aber die Abschätzung * 60 ' ' ) $ ) # # # ! (4.12) # # (4.13) etwas angenehmer sein, denn nun erhalten wir84 * ZA B 0 (A D B $6 0 (A D EB $6 $* 0 , , , 0 # $ LONQP R $* = >:@ OL NQP R * $ =?>:@ Mit etwas mehr Sorgfalt85 kommt man schließlich auf die Aufwandsabschätzung ?= >@ $/Y .ZY = >:@ . * * * (4.14) Operationen in für die Berechnung der FFT. Nun sind DFT und FFT ja sicher schöne Sachen, aber was haben sie bitte mit unserem Ausgangsproblem, nämlich der (hoffentlich schnellen) Multiplikation zweier Polynome zu tun. In der Tat eine ganze Menge, wenn man die folgenden Begriffe in Betracht zieht. Definition 4.12 (Faltungen) . Die Faltung ist definiert als I I ;CD I ;CD ; 8 J; < ; ! gesetzt wird, wann immer < ein unzulässiger Index ist86. wobei ; . Die Faltung modulo , ist definiert als 2. Seien ; $ + ; 8 < 1. Seien , Allgemein ist I 8 < ; (4.15) Und die Faltung stellt nun auch die gewünschte Beziehung zwischen der Multiplikation von Polynomen und der DFT dar. 83 Die Auswertung eines konstanten Polynoms an einer Stelle gibt’s bekanntlich umsonst Mit praktisch derselben Rechnung wie bei Freund Karatsuba in (4.3). 85 Und unter Ausnutzung von . 86 Also zu " " bzw. " " gehört. 84 - 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 76 Proposition 4.13 Seien 1. Es ist G und , . eine primitive –te Einheitswurzel , und + D ' ' 2. Es ist (4.16) (4.17) wobei hier “ ” die komponentenweise Multiplikation der Vektoren bezeichnet. D A D B 3. Damit ist (4.18) Beweis: Da I ; I I ; ; I I ; I ; ; , ; R ; EJ R folgt (4.16) unmittelbar. Demnach ist aber . , $ # und somit $ A ; B A ; # B 8 < A ;E; BB , A ;E; BB A , A 8 < ' ' was uns (4.17) liefert. (4.18) folgt dann sofort aus (4.17) und (4.8). # Ausgehend von (4.18) können wir nun ein Verfahren zur schnellen Multiplikation zweier Polynome modulo angeben. #) und ! % # ( . Algorithmus 4.14 (Schnelle Multiplikation modulo , primitve –te Einheitswurzel Gegeben: 1. Berechne mittels der FFT, Algorithmus 4.11, ! ' und 2. Berechne das komponentenweise Produkt ( ! & & 4.3 Schnelle Polynommultiplikation III – Root it yourself 77 3. Berechne, wieder mit Algorithmus 4.11, ) D ( A D B Ergebnis: ) , . ist jetzt wieder moderat: Wir haben in Schritt 1. 2 FFTs zu berechnen, also Y 7 Der=?>@ Aufwand Operationen in , in Schritt 2. Multiplikationen in und in SchrittY 3. nochmal =?>:@ eine DFT und Multiplikationen, also insgesamt wieder ein Gesamtaufwand von 7 Operationen in . Um nun zwei Polynome D miteinander zu multiplizieren, verwenden wir wieder die Zerlegung . $ $ 3: D führen die drei87 Multiplikationen $ , $ # mit Algorithmus 4.14 aus und bauen die Ergebnisse, die ja nur Grad ,E , haben und somit jetzt exakt sind, dann wieder passend zusammen. Y 7 ?= >@ Übung 4.2 Formulieren Sie das schnelle Multiplikationsverfahren für zwei Polynome und weiist. sen Sie nach, daß sein Aufwand wieder Es gibt im übrigen einen Ring, in dem die FFT immer funktioniert, weil er –te Einheitswur besitzt, nämlich die komplexen Zahlen . Und dort, bzw. für trigozeln für beliebiges nometrische Polynome als Partialsummen von komplexen Fourierreihen, wurde auch die FFT ursprünglich in (Cooley & Tukey, 1965) eingeführt88 bzw. wiederentdeckt, siehe (Cooley, 1987; Cooley, 1990). Für allgemeine Ringe, insbesondere für endliche Restklassenringe, aber auch für endliche Körper, ist die Sache mit der Existenz der –ten Einheitswurzeln natürlich wesentlich komplizierter und unangenehmer. 4.3 Schnelle Polynommultiplikation III – Root it yourself Die schnelle Polynommultiplikation via DFT und FFT à la Algorithmus 4.14 ist ja schön und gut, funktioniert aber halt eben nicht in allen Ringen, denn sie setzt ja die Existenz einer – ten primitiven Einheitswurzel voraus, wobei auch noch eine Zweierpotenz sein muß. Das ist aber bereits eine Forderung, die alle Ringe der Form &% &( , . , von vornherein ausschließt. Das heißt, wir beschränken uns schon mal auf Ringe , in denen eine Einheit ist – davon gibt’s ja auch noch genug. Und wenn’s in so einem Ring keine –te Einheitswurzel gibt, naja, dann basteln wir uns halt einfach eine; vornehmer: Wir adjungieren eine geeignete Einheitswurzel. 87 88 ! G Schließlich müssen wir ja nicht alles vergessen, was wir an “guten” Dingen im Abschnitt 4.1 gelernt haben. Auf ganzen vier Seiten! 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 78 Lemma 4.15 Sei ist in dem Ring Einheitswurzel. # , # . Dann ein kommutativer Ring mit , so daß und sei 0 8 $ $ # 0 !&% ( das Element eine primitive te te Einheitswurzel. Da außerdem , # '0 . eine ist, ergibt #8 # + # #0 daß tatsächlich eine primitive te Einheitswurzel ist. Bemerkung 4.16 Der Ring aus Lemma 4.15 ist normalerweise kein Körper, nicht einmal und , denn dann ist $ # wenn ein Körper ist. Ein einfaches Beispiel ist $ reduzibel. 2 + , ist Beweis: Da der einzige Primteiler von Die gute Nachricht von Lemma 4.15 ist also, daß wir die Existenz der gesuchten Einheitswurzel in jedem Ring erzwingen können, die schlechte Nachricht ist hingegen, daß wir in einem polynomialen Restklassenring rechnen müssen, was zu ein paar Detailproblemen führt, die wir uns jetzt ansehen wollen. . Das ist keine echte Seien nun also zwei Polynome, so daß , genügt Einschränkung, denn so ein kann man immer bestimmen. Und da es natürlich, modulo zu rechnen. Wir setzen @ , / , -, $$# ' und sind die “Wurzeln” von und es gilt $+# Nun zerlegen wir und in polynomiale “Blöcke” der Länge : I ; ; I ; ; . ; ; ; ; D < , indem wir Damit definieren wir künstlich bivariate Polynome I ; ; I ; ; und ; ; diese beiden Zahlen setzen, und erhalten, daß . und (4.19) (4.20) 4.3 Schnelle Polynommultiplikation III – Root it yourself 79 ! $ $ # zu berechnen, denn , $ A $+# B folgt, , brauchen wir nun “nur” in Das bivariate Produkt aus der “Division–mit–Rest–Zerlegung” daß , + $ #) , $ ' $ J Bemerkung 4.17 Für unsere Ausgangspolynome , deren Produkt ja Grad hat, ist diese modulare Rechnung rein formal. Beim rekursiven Aufruf dieser Multiplikationsroutine wird aber ganz gezielt und explizit modulo gerechnet und dann macht die Sache Sinn! $+# @ wählen wir somit einen eindeuti modulo $$# aus, für den außerdem @ @ $ @ # ; ; , ; ; Durch die zusätzliche Einschränkung gen Repräsentanten aus der Äquivalenzklasse @ gilt – schließlich ergibt sich ja der Koeffizient zu als I ; EJ ; und der Grad der Summe von Polynomen ist erhalten wir somit, daß 0 dem Grad der einzelnen Summanden 89 . Mit R A ! $$# B (4.21) Wenden wir schließlich Lemma 4.15 auf die Zweierpotenz an, dann erhalten wir eine der Ordnung - in ! % $$# ( . Wegen (4.19) primitive Einheitswurzel oder enthält auch eine –te primitive Einheitswurzel und zwar entweder , je nachdem, ob gerade oder ungerade ist. Ersetzen wir durch in (4.21), was , dann erhalten wir die äquivalente Formulierung möglich ist, da 1 + K U (4.22) , # was wir wegen , also $$#0 $$# ' # ) , 89 + in Der Fall “ ” kann natürlich eintreten, und zwar, wenn sich die Leitterme wegheben. 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 80 6 , auch als + D (4.23) schreiben können. Doch nun sind wir im Geschäft, denn in sind jetzt alle Voraussetzungen für eine schnelle Multiplikation modulo erfüllt! Denn da eine primitive –te Einheitswurzel in ist, ist auch – und das ist die Grundvoraussetzung für eine –te Einheitswurzel in eine FFT-Multiplikation. # # !&% $$# ( ) ' , , und D . Algorithmus 4.18 (Schnelle Polynommultiplikation in Gegeben: kommutativer Ring mit so daß , 1. Setze 2. Setze (in ) 3. Für < setze und dann 4! $ $ # I ; ; I ; ; I ; ; ; I ; , D ; ; 4. Berechne mit der schnellen Polynommultiplikation, Algorithmus 4.14 (unter Verwendung der ten primitiven Einheitswurzel ), das Produkt in 1 und verwende Algorithmus 4.18 rekursiv für die Rechnung im Ring . 5. Setze 6. Setze Ergebnis: + , . A D B 4.3 Schnelle Polynommultiplikation III – Root it yourself 81 Wenn man nun eine sorgfältige Analyse des Rechenaufwands betreibt, dann erhält man (Gathen & Gerhard, 1999, Theorem 8.22, S. 228)90 , daß man mit , ?= >:@ = >:@ ?= >:@ $Y * ?= >@ =?>:@ ?= >:@ Operationen in auskommt, das “implizite” Adjungieren der primitiven ten Wurzel in kostet also lediglich den multiplikativen Faktor . Um uns klarzumachen, mit was für einer Sorte Algorithmus wir es da eigentlich zu tun haben, schauen wir uns jetzt einmal ein langes und explizites Beispiel an. _ die beiden Polynome .'T$ $ - $* Beispiel 4.19 Multiplizieren wir doch einmal in $ $* . 6 @ . wählen wir , also . Damit liefern also die einzelnen Schritte von Da Algorithmus 4.18 die folgenden Resultate: 1. 2. , .- , . , da $$# . 3. Damit erhalten wir die Zerlegungen - $$* T ! und somit sowie T : ! 2 $$# 2$6$$ # $ $ - 2 $6 0 8 ' 4. Jetzt geht also los mit der FFT! Mit der , erhalten wir, daß # ten primitiven Einheitswurzel , also , * ; B 8 (A 5,! ;CB 8 < (A *;HB 8 < ! H A < H und analog für . Diese Vektoren können wir explizit91 als 90 ! $62$* $62$* 7 $6 $ $6 $ $* - $* $* - $* $* $ $* $ Ist es eigentlich wahrscheinlich, daß in einem mathematischen Buch die Nummer eines Satzes mit der rückwärtsgelesenen Seitenzahl übereinstimmt? 91 Unter Verwendung von & im Ring . Die “richtige” FFT spielen wir später auch noch einmal durch. 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 82 $* T $ - ' - T $*$ -22$6$ - ! % $+# ( liefert dann, daß angeben. Die komponentenweise Multiplikation92 in _ - T $ $ - $ - - T $ $ $ - T $* $ $ ' &8 , (4.24) T $ - $ - $ - $ $ $ $ bzw. $ - 2 $6 T $ - 2 $6 $ - 2$6 $ - 2$6 Die Koeffizienten von erhalten wir dann aus der inversen Fouriertransformation der Koeffizienten von , also als - D A D B da D A CB D + + - - D + - D . In der Hier machen wir uns das Leben etwas leichter und verwenden die FFT mit Tat erhalten wir aus die beiden Vektoren T $62$6 T $6 $*$* # $ $+# - , T $ - $ - 2$ - J D und von D die wir bei der Berechnung von D ' D D $ - 2$ - D A D B ' J D B 6 $ 6 $ T D % A J D $ 2 $$# T $ $ $ - $ . T $ T * $ - T 6 Nach dem erforderlichen Mischen erhalten wir somit, daß also 92 - DD D' % D - $ - 2$ T $6 $* T $* - T $* nochmals aufspalten in $ 2$$# - T $ $ - T $6 T$ A $ T B T $ A - T$6 E B $ A - T$* $* B $ A $ 2$$# B Hier erfolgt nun der rekursive Aufruf, siehe Beispiel 4.20. 4.3 Schnelle Polynommultiplikation III – Root it yourself 5. und daher A D B A $ D T B B D T T $ A A - T$6 EB D $ A $ $+# B $+# T$ - 2$6 $ A - $ $ 83 $ A - T$* $* B D B $ A $ 2$$# B 6. Somit erhalten wir + $$ # A $ CB - 2$6 $ - $ 2$* B $ $ $+# B A $ $ - _ $ $*T$ A $ + $ # $ $* B , A T $ $ - 2 $6 B A 6 was man “zu Fuß” mit auch bekommen hätte. Beispiel 4.20 Als Beispiel für die rekursive Berechnung in Schritt 4 aus Beispiel 4.19 berechnen wir nun ' A - $62$* B ,A - T$ - $ - B ) J K U J K U _ . Wir haben also jetzt - und damit natürlich immer noch in nicht mehr aus dem Grad des Produkts ermittelt93 1. 2. festgelegt, sie werden ' . . . 3. Die Zerlegungen sind jetzt - $$ - - $62$* : -- - $ - 2$ - _ ! % $+# ( das Produkt 4. Jetzt bestimmen wir, wieder in , R D A (A B , 2A BB R D AA - $6 $* B , A - T $ - 2$ - BB R D A - $ A T $ $6 $6 T B $* $6 B R D A T $ $6 B $* $ - 2$6 93 Sonst wäre der ganze Geschwindigkeitsvorteil zum Teufel. 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 84 5. Also ist94 D B A - B A T $ $* B - $* $ - $* A A $*2$$# B $ $ - $6 6. was uns schließlich95 unser Endergebnis # B $* $ -$6 $ A TC$ B A $ $* $ 2- $$ 2$6 'T$ - $ - $ - liefert. Und genau dieses Polynom steht ja auch in der letzten Zeile des “Ergebnisvektors” in (4.24), wo es allerdings “von Hand” und nicht rekursiv berechnet wurde. Die einzige Einschränkung an den Ring bestand nun darin, daß eine Einheit in sein mußte – das lag aber im wesentlichen daran, daß wir in jedem Schritt der FFT in Polynom in zwei identische Polynome aufgespalten haben; und was man mit machen kann, kann man zumeist auch mit beliebigen anderen Zahlen, insbesondere mit machen. Und tatsächlich gibt es auch eine adische FFT (Gathen & Gerhard, 1999, Exercise 8.26, S. 239–240) und eine adische Version der schnellen Polynommultiplikation (Gathen & Gerhard, 1999, Exercise 8.30, S. 240), die auf Schönhage (Schönhage, 1977) zurückgeht. Und damit kann man schon eine ganze Menge erreichen, nämlich beispielsweise alle Ringe der Form % ( , wobei eine Primzahl ist96 ; am wichtigsten ist natürlich der Fall , denn diese Ringe sind die “natürlichen” Ganzzahlbereiche auf Rechnern. ! 4.4 Schnelle Ganzzahlmultiplikation – Sch¨ onhage und Strassen Jetzt können wir schließlich zu unserer schnellen Multiplikation von ganzen Zahlen zurückkommen und diese auf die schnelle Polynommultiplikation zurückführen, indem wir eine Multiprecision–Zahl I ; ; ; ! # an der Stelle 4 , J als Wert des Polynoms 4 auffassen. Anders gesagt, Sind nun zwei Multiprecision–Zahlen der Länge , dann sind und zwei Polynome vom Grad mit Koeffizienten in , die wir nun dank Algorithmus 4.18 mit einem Aufwand von Ringoperationen berechnen könnten97 , wenn 94 Immer noch in . mich zu wiederholen: die Rechnungen erfolgen immer noch in . 95 Auch auf die Gefahr, 96 Ist , wählt man die triadische Form, ansonsten die dyadische. 97 Y ?= >:@ =?>@ ?= >:@ Man beachte den Konjunktiv! 4.4 Schnelle Ganzzahlmultiplikation – Schönhage und Strassen 85 wäre. Die Auswertung dieses Polynoms ist eine vergleichsweise simple Geschichte, denn die Multiplikationen im Hornerschema ; D; $ C; D , < # sind ja nur Shifts! Außerdem müssen wir bei der Addition berücksichtigen, daß die Koeffizienten Worten bestehen, des Produkts aus maximal und wir somit in der Tat mit Wortoperationen auskommen, da wir im Hornerschema Additionen mit Zahlen der Länge durchzuführen haben. Die Idee von Schönhage und Strassen (Schönhage & Strassen, 1971) besteht nun darin, daß und man wieder zuerst einmal die Zahlen98 als Polynome auffasst. Dann wählt man sowie gilt und so, daß (wie gehabt) interpretiert als Polynome in , wobei &% ( . Dieser Ring hat eine schöne Eigenschaft. I ; 0 , # ; J ; =?>@ , Y =?>: @ , < 1$ ?= >:@ $ Y =?>:@ " @ , ! $$# " S ?= >:@ KU K U . Dann ist ist eine primitive –te Einheitswurzel in ! $+# $$# , , heißt –te Fermat–Zahl99 Definition 4.22 Die Zahl Lemma 4.21 Sei &% (. @ , G Damit sind also alle Bedingungen für eine FFT–basierte schnelle Multiplikation mittels Algo rithmus 4.14 gegeben und natürlich ist dank unserer Annahme das Ergebnis dann letztendlich auch korrekt. Die nächste Idee ist dann wieder wie bei der Herleitung von Algo # in , wobei . Wir zerhacken rithmus 4.18 eine Zerlegung von unsere Zahlen der Länge also wieder in Blöcke der Länge und erhalten100 die Koeffizienten des Ergebnisses als diskrete Faltung der Koeffizienten der Ausgangszahlen bzw. der Ausgangspolynome. Für diese diskrete Faltung verwendet man nun eine FFT, bei der Zahlen in etwa halber Länge miteinander multipliziert werden müssen, was man mit einem rekursiven Aufruf der Multiplikationsroutine löst. Bemerkung 4.23 (Schönhage & Strassen) 98 Zur Terminologie siehe Definition 2.1 auf S. 14. Wenn ich micht recht erinnere, dann hat Fermat vermutet, daß alle Zahlen dieser Form Primzahlen wären, denn , , , , , $ – dieses erste Gegenbeispiel stammt von Euler. Übrigens reichen –Bit Ganzzahlen für schon nicht mehr aus. 100 Bis auf Übertrag, aber der bleibt ja, was den Aufwand angeht, im Rahmen, wie unsere Betrachtungen über die Auswertung von Polynomen an der Stelle gezeigt haben. 99 4 RECHNEN MIT (UNIVARIATEN) POLYNOMEN 86 1. Das Verfahren von Schönhage & Strassen ist seit 1971 auf dem Markt und bis heute ist noch keine schnellere Methode bekannt! Auf der anderen Seite scheinen die FFT– basierten Verfahren noch nicht besonders in die kommerziellen Computeralgebra–Programme integriert zu sein. Das ist übrigens nicht so verwunderlich: Bevor man an dem sensiblen internen Kern herumspielt, fügt man lieber “sichtbare” Features wie Audio, Video und Animation hinzu – sowas verkauft sich nun einmal besser. Und ansonsten hofft man auf immer leistungsstärkere Rechner. 2. Diese Philosophie ist nachvollziehbar. Die Einführung komplett neuer Verfahren, auf denen ja immerhin das gesamte System aufsetzt, ist immer ein großes Risiko und f ührt normalerweise zu jeder Menge unerwarteter Fehler. 3. Laut (Gathen & Gerhard, 1999) war101 Magma V 2.4102 das einzige Computeralgebra– Programm, das FFT–basierte Verfahren zur Multiplikation von Polynomen und ganzen Zahlen verwendet. Inzwischen ist die FFT–Multiplikation von ganzen Zahlen zumindest auch in GinaC verfügbar und tatsächlich sind die Multiplikationsroutinen dort um einiges schneller als beispielsweise die in MuPAD. Y * ?= >:@ eine natürliche Komplexitätsschranke für 4. Es sieht generell so aus, als ob Probleme ist, zu denen es ein nichttriviales, naives Verfahren mit einem Aufwand von gibt. Y * 5. Generell ist (Schönhage & Strassen, 1971) sehr lesenswert! Die Einleitung gibt auch die Geschichte der “Jagd” nach schnellen Multiplikationsverfahren wieder, die mit Karatsuba (Karatsuba & Ofman, 1963) beginnt und über Verfahren von Toom (Toom, 1963), Schönhage (Schönhage, 1966) bzw. Cook (Cook, 1966) mit mit einem –Aufwand von jeweils Y Schönhage Cook T LONQP R =?>:@ LONQP R = >:@ Y ?= >:@ = >:@ =?>@ schließlich bei dem (bisher) optimalen Aufwand Toom L landet. 6. In (Schönhage & Strassen, 1971) wird auch darauf hingewiesen, daß Knuth unabh ängig die Idee hatte, die FFT zur Multiplikation zweier ganzer Zahlen zu verwenden. Man sollte dabei bedenken, daß (Knuth, 1998), genauer gesagt, die erste Auflage von 1969 auch die Arbeit von Schönhagen und Strassen beeinflußt hat. , + # # #0' #0 # #8 Beweis von Lemma 4.21: Daß und ist, ist für uns inzwischen ja schon fast Routine. Also ist immer eine Einheitswurzel der Ordnung . , dann ist Ist nun und der einzige Primteiler hiervon ist , das heißt, es genügt, einzusehen, daß 101 102 Richtiger: Zum Zeitpunkt als dieses Buch geschrieben wurde. Was auch immer das ist. 4.4 Schnelle Ganzzahlmultiplikation – Schönhage und Strassen 87 . Aber auch das ist einfach, wenn # D D J J K U kein Nullteiler ist. Bleibt also nur noch zu zeigen, daß man bedenkt, daß + " " Bemerkung 4.24 (Lemma 4.21) Man kann sogar zeigen (Gathen & Gerhard, 1999, Exercise 8.32), daß genau dann eine –te , ist. Für unsere Zwecke reicht primitive Einheitswurzel in ist, wenn von der Form , aber die einfachere Form von Lemma 4.21 völlig aus.