(univariaten) Polynomen R[x]

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