Sie sind auf Seite 1von 72

Eine verst¨andliche Beschreibung des Sch¨onhage-Strassen-Algorithmus

Malte Leip 9. April 2009

1

1

Einleitung

1.1 Wieso gibt es diesen Text?

Im Internet findet man kaum Beschreibungen des Sch¨onhage-Strassen-Algorithmus. Die verfugba-¨ ren Beschreibungen sind fur¨ die meisten Menschen schwer verst¨andlich und beinhalten keine Bei- spiele. Dies m¨ochte ich mit meiner Beschreibung ¨andern. Ich hoffe sie ist einfacher als die anderen Beschreibungen und hilft, den Sch¨onhage-Strassen-Algorithmus zu verstehen. Ich beschreibe beide Varianten des Sch¨onhage-Strassen-Algorithmus, die komplexe Variante und die modulare Variante.

1.2 Was ist hier anders?

Ich versuche in meinem Text auch Schritte zu erkl¨aren, die fur¨ jemanden mit guten mathematischen Vorkenntnissen “offensichtlich” sind. Diese werden in anderen Informationsquellen oft ubersprun-¨ gen. Zus¨atzlich gibt es zu den meisten Schritten ein Beispiel, damit das Vorgehen klarer wird. Schlussendlich gibt es dann auch noch ein komplettes Beispiel zum Multiplizieren mit beiden Varianten des Sch¨onhage-Strassen-Algorithmus.

1.3 Wie ist dieser Text aufgebaut?

Der Text ist in zwei H¨alften geteilt. Die linke Seite beinhaltet die theoretische Beschreibung und einige kleine Beispiele. Die wichtigsten Abschnitte und Gleichungen sind fett gedruckt. Wenn man nur die fetten Stellen liest, erh¨alt man einen “Kurzuberblick”¨ uber¨ den Sch¨onhage-Strassen- Algorithmus. Dies ist z. B. bei erneutem Lesen hilfreich, da man so die Herleitungen usw. uber-¨ springen kann. Die rechte Seite beinhaltet ein vollst¨andiges Beispiel des Sch¨onhage-Strassen- Algorithmus, mit allen Schritten. Dieses Beispiel ist zur besseren Unterscheidung auch in einer anderen Schriftart geschrieben. Ich empfehle zun¨achst einmal nur das theoretische zu lesen und danach noch einmal beides gemeinsam, wobei man versucht, das Beispiel nachzuvollziehen.

1.4 Zwei Varianten

Die Grundidee des Sch¨onhage-Strassen-Algorithmus ist das Aufspalten der Zahlen in Stucke¨ ge- eigneter L¨ange, der Fourier-Transformation, Multiplikation der einzelnen Elemente und Ruck-¨ transformation. Dies kann man entweder mit komplexen Zahlen oder in einem Restklassenring durchfuhren.¨ Ich werde sowohl die komplexe als auch die modulare Variante beschreiben. Bei der komplexen Variante hat man Zahlen, die nicht mit unendlicher Genauigkeit berechnet werden k¨onnen. Deshalb muss mit einer genugend¨ hoher Genauigkeit gerechnet werden, damit der Fehler hinterher rausf¨allt. Die modulare Variante ben¨otigt so etwas nicht. Sie ist meist schneller, weshalb sie auch bevorzugt eingesetzt wird.

2

2 Der Sch¨onhage-Strassen-Algorithmus mit komplexen Zahlen

2.1 Das Faltungsprodukt

¨

Multipliziert man zwei n-stellige Zahlen miteinander ohne den Ubertrag zu beachten, so ist die

so erhaltene Folge das Faltungsprodukt der zwei Eingabefolgen (der zwei zu multiplizierenden Zahlen). Ein Beispiel:

1

2

3

4

*

2

3

4

1

 

1

2

3

4

 

4

8

12

16

 

3

6

9

12

 

2

4

6

8

 

2

7

16

26

26

19

4

Die Folge (2, 7, 16, 26, 26, 19, 4) ist das Faltungsprodukt der Folgen (1, 2, 3, 4) und (2, 3, 4, 1)

¨

Macht man jetzt noch die Ubertr¨age, so erh¨alt man das Produkt, 2888794. Aus was besteht dieses Faltungsprodukt? Das Element ganz rechts ist das Produkt der beiden ganz rechten Elemente, also 1 4, das Element eins weiter links ist die Summe der Produkte des jeweils ganz rechten und das zweitrechteste Element, also (1 3) + (4 4).

b 2 , b 1 , b 0 ) und das Faltungsprodukt

Allgemein, haben wir die Folgen (

,

a 2 , a 1 , a 0 )

und (

,

( c

2 , c 1 , c 0 ), so ist c r definiert als:

c r =

a i b j

i+j=r

(1)

Dies ist sehr interessant in Verbindung mit der Fourier Transformation. Man hat zwei Zahlen

a und b mit n Ziffern. Man w¨ahlt eine naturliche¨

(bei den Zahlen oben ist n = 4, also gilt K 8 und man w¨ahlt K z. B. K = 8). Hat man die

Folgen (a K1 ,

Anzahl an Elementen wird nur bis K Ziffern mit Nullen aufgefullt),¨

und (b K1 ,

tion die Folgen (ˆa K1 ,

ˆ

, b 1 , b 0 ), also z. B. (0, 0, 0, 0, 2, 3, 4, 1), so erh¨alt man durch die Fourier Transforma-

z. B. (0, 0, 0, 0, 1, 2, 3, 4),

, a 1 , a 0 ), von der Zahl a (welche noch immer eigentlich aus n Ziffern besteht, die

Zahl K aus, die die Bedingung K 2n erfullt¨

also

ˆ

, aˆ 1 , aˆ 0 ) und ( b K1 ,

ˆ

, b 1 , b 0 ). Multipliziert man die einzelnen Elemente

ˆ

ˆ

ˆ

miteinander, so dass man die Folge (ˆa K1 b K1 ,

transformierte einer Folge (c K1 ,

, aˆ 1 b 1 , aˆ 0 b 0 ) erh¨alt, so ist diese Folge die Fourier-

, c 1 , c 0 ), wobei gilt

c r =

a i b j

i+jr(modK)

(2)

i + j r(modK) bedeutet, dass, wenn man i + j durch K teilt, der selbe Rest bleibt, wie wenn man r durch K teilt (i + j und r sind kongruent modulo K). Man kann naturlich¨ auch mehr als eine Ziffer in jedes Element der Folge packen, d.h. man kann

die Zahl auch in Stucke¨ zu je l Ziffern teilen. Hat man immer nur eine Ziffer, so ist eben l = 1.

, c K1 ), welche man durch die inverse diskrete Fourier Trans-

formation bekommt, das Faltungsprodukt, womit man dann das Endergebnis der Multiplikati- on errechnen kann. [8] Dies nennt sich das Faltungstheorem und ist die Grundidee hinter dem Sch¨onhage-Strassen-Algorithmus. Hier wird auch klar, warum K 2n sein muss. Wenn man zwei Zahlen mit n Ziffern multipli- ziert, so erh¨alt man eine Zahl mit maximal 2n Ziffern.

Somit ist die Folge (c 0 , c 1 ,

4

¨

Ubertr¨age machen, d.h.

Wir addieren die einzelnen Elemente. Allerdings hat c K2 einen h¨oheren Stellenwert als c K1 . Deswegen “verschieben” wir die Zahlen bevor wir sie addieren:

Um dann noch das Produkt zu erhalten, muss man nur noch die

c =

K1

h=0

c h 10 hl

(3)

Das benutzte Element bei h = 1 muss um l Stellen verschoben werden, d.h. wir multiplizieren

mit 10 l , da wir im Dezimalsystem sind. W¨aren wir im Dualsystem, so wurden¨

plizieren. Das Element bei h = 2 muss um 2l verschoben werden etc. Deswegen multiplizieren wir

mit 10 hl .

wir mit 2 l multi-

6

2.2

Durchfuhrung¨

der Multiplikation

Nun kommen wir zu dem eigentlichen Ziel: zwei ganze Zahlen zu multiplizieren. Die Durchfuhrung¨ der einzelnen Schritte wird dann in den jeweiligen Unterkapiteln erkl¨art (die Fourier-Transformation, etc.). Einiges hier wird erst nach der Lekture¨ der unteren Abschnitte voll verst¨andlich sein. Die Zahlen liegen in Bin¨arschreibweise vor und haben je n Ziffern (ist eine kurzer¨ als die andere, werden entsprechend viele Nullen vorne angefugt).¨ Die beiden Zahlen werden a bzw. b genannt . Diese k¨onnten z. B. 9876 10 und 1234 10 sein, also in der geforderten Bin¨arschreib- weise a = 10011010010100 2 und b = 10011010010 2 . n, also die Anzahl an Ziffern, ist bei a 14 und bei b 11. Wir erweitern b also zu b = 00010011010010 2 . Somit ist n nun bei beiden gleich 14. Da wir fur¨ die Fourier Transformation schließlich eine Folge brauchen, ist der n¨achste Schritt das Aufspalten der beiden Zahlen in K Stucke¨ zu je l Bits . Dabei muss K eine Zweierpotenz sein, also K = 2 k . Außerdem definieren wir L = 2 l . Fur¨ das Aufspalten in Teilstucke¨ gilt die Beschr¨ankung 2n 2 k l < 4n (warum gr¨oßer 2n siehe das Kapitel Faltungs- produkt). Das heißt in unserem Beispiel 28 2 k l < 56. W¨ahlen wir fur¨ l = 4. Dann haben wir 28 2 k 4 < 56, dividieren wir nun durch 4, so ergibt sich 7 2 k < 14. Um k herauszufinden logarithmieren wir zur Basis 2: log 2 (7) k < log 2 (14). Setzt man nun die Werte der Logarith-

men ein, so erh¨alt man 2, 81

ist somit k = 3. Wir haben nun die Folgen (0000, 0000, 0000, 0000, 0010, 0110, 1001, 0100) 2 und

(0000, 0000, 0000, 0000, 0000, 0100, 1101, 0010) 2 . Wir k¨onnen fur¨ a und b schreiben a = (a K1

und entsprechend fur¨ b. D.h. a 0 = 0100, a 1 = 1001, a 2 = 0110, a 3 = 0010, a 4 = 0000,

und b 0 = 0010, b 1 = 1101, b 2 = 0100, b 3 = 0000,

2 k < 3, 81

Die einzige ganze Zahl, die fur¨ k in Frage kommt

, b 7 = 0000.

a

1 a 0 ) L

, a 7 = 0000

Bevor die Fourier Transformation der Folgen gemacht wird, empfiehlt Knuth [1] , die einzelnen

Elemente durch 2 k+l zu teilen , damit der Fehler, der durch fehlende Genauigkeit auftritt, besser absch¨atzbar wird (die Absolutwerte w¨aren dann kleiner 1). Nachdem c j zuruck¨ transformiert wurde, wird jedes c j mit 2 2(k+l) multipliziert. Im Beispiel wird dies nicht berucksichtigt,¨ da bei solch kleinen Zahlen der Fehler sowieso zu klein ist um etwas zu bewirken, aber ohne die Division etc. ist das ganze ubersichtlicher¨ (die Zahlen sind dann nicht so klein). Man berechnet also die diskrete Fourier Transformation der beiden Folgen, und

erh¨alt somit

0 s < K . Danach wird die doppelte Transformation,

also cˆ s ausgerechnet und damit dann auch c s (wie das Ganze funktioniert wird in den ent-

, c 1 , c 0 ) . Daraus

, b 1 , b 0 ) . Nun multipliziert man die Elemente

miteinander, sodass cˆ s = aˆ s b s fur¨

a K1 ,

ˆ

, aˆ 1 , aˆ 0 ) und ( b K1 ,

ˆ

ˆ

ˆ

ˆ

sprechenden Unterkapiteln beschrieben). Somit erh¨alt man die Folge (c K1 , l¨asst sich das Produkt folgendermaßen ausrechnen:

ab =

K1

h=0

c h L h = c 0 + c 1 L +

+

c K2 L K2 + c K1 L K1

(4)

Dies ist einfach wieder das Zusammensetzten einer Zahl aus der Ergebnisfolge. Diese Ergebnisfolge war das Faltungsprodukt, somit ist auch klar, wieso mit L multipliziert wird.

8

Machen wir ein Beispiel der Multiplikation mit dem komplexen Sch¨onhage-Strassen-Algorithmus:

Wir m¨ochten die beiden Zahlen a = 9876 und a = 5678 miteinander multiplizieren. In Bin¨arschreibweise sind diese a = 10011010010100 2 und b = 01011000101110 2 . Wir teilen diese Zahlen in Stucke¨ zu je 4

Bits, also l = 4. Durch 2n 2 k l < 4n, also 2n 42 k

somit haben wir 7 2 k < 14. Logarithmieren wir nun wieder, so erhalten wir log 2 (7) k < log 2 (14),

k < 3.807. k ist somit 3. Berechnen wir nun gleich K = 2 k = 2 3 = 8. Nun

< 4n bekommen wir 1 2 n 2 k < n. n ist hier 14,

und schließlich 2, 807

stuckeln¨

wir die beiden Zahlen und erhalten somit

s

a

s

 

b

s

 

0

0100

2

4

10

1110

2

14

10

1

1001

2

9

10

0010

2

2

10

2

0110

2

6

10

0110

2

6

10

3

0010

2

2

10

0001

2

1

10

4

0000

2

0

10

0000

2

0

10

5

0000

2

0

10

0000

2

0

10

6

0000

2

0

10

0000

2

0

10

7

0000

2

0

10

0000

2

0

10

9

2.3

Berechnung von ω

Bei der Fouriertransformation werden wir bald oft die primitive Einheitswurzel ω und die Potenzen

K . Anstatt diese jedes Mal neu zu berechnen, ist es sinnvoller,

die Werte vorzuberechnen. Ein Problem ist auch die Genauigkeit, die komplexe Zahl ω kann nicht auf unendliche Genauigkeit berechnet werden. Mit der Genauigkeit besch¨aftigt sich ein Kapitel

davon ben¨otigen. Dabei ist ω = e

2πi

weiter unten. Um die Potenzen von ω vorzuberechnen geht man folgendermaßen vor [1][3] : Zuerst wird definiert:

(5)

Außerdem schreiben wir

(6)

Um den jeweils n¨achsten reellen bzw. komplexen Teil zu berechnen kann man folgende Formeln verwenden:

(7)

x r+1 = 1 + x r

und

(8)

ω r = x r + iy r

ω r = e

2πi

2

r

y

2

r

2x

r+1

y r+1 =

fur¨

ausgerechnet, so k¨onnen die Potenzen von ω folgendermaßen berechnet werden:

r > 1

(die Werte fur¨ r = 0 und r = 1 werden eingespeichert). Hat man dann diese Werte

ω j = ω j k1

1

ω

j

k1 ω j 0

1

k

(9)

Zu k siehe oben, j ist hier der Exponent und j = (j k1

j 1 , j 0 ) 2 .

Wie kommen diese Formeln zustande? Betrachten wir zun¨achst die ω auf dem Einheitskreis der komplexen Ebene.

die ω auf dem Einheitskreis der komplexen Ebene. Abbildung 1: Skizze zur den Omega auf dem

Abbildung 1: Skizze zur den Omega auf dem Einheitskreis der komplexen Ebene

Hier kann man auch anschaulich sehen, dass sich der Winkel von ω r auf ω r+1 halbiert. Was bringt uns das? Wenn wir ω r = x r +iy r haben, so m¨ochten wir nun den Punkt auf dem Einheitskreis herausfinden, der durch den halben Winkel charakterisiert ist (fur¨ ω r mit r 2).

10

Bevor wir mit der Fourier Transformation weitermachen, erstellen wir zun¨achst eine Liste von Werten fur¨ ω, wofur¨ wir allerdings zun¨achst die Werte von x r und y r ben¨otigen: Anmerkung: In allen folgenden Tabellen/Listen sind die Werte auf 3 Nachkommastellen gerundet!

x 1 = 1

x 2 = 0

x 3 = 1+0 = 0, 5 = 0, 707

2

und fur¨

y:

y 1 = 0

y 2 = 1

y 3 =

1

20,707 =

1,414 = 0, 707

1

Zusammengesetzt ergeben sich die Werte von ω:

ω 1 = 1

ω 2 = i

ω 3 = 0, 707 + 0, 707i

Hieraus k¨onnen wir nun die Werte der Potenzen von ω, welches hier den Wert von ω 3 hat, errechnen:

(1) 0 (i) 0 (0, 707 + 0, 707i) 1 = 0, 707 + 0, 707i

= (1) 0 (i) 1 (0, 707 + 0, 707i) 1 = 0, 707 + 0, 707i

(1) 1 (i) 0 (0, 707 + 0, 707i) 1 = 0, 707 0, 707i

ω 7 = (1) 1 (i) 1 (0, 707 + 0, 707i) 1 = 0, 707 0, 707i

ω 0 = (1) 0 (i) 0 (0, 707 + 0, 707i) 0 = 1

ω 1 =

ω 2 = (1) 0 (i) 1 (0, 707 + 0, 707i) 0 = i

ω

3

ω 4 = (1) 1 (i) 0

ω 5 =

ω 6 = (1) 1 (i) 1

(0, 707 + 0, 707i) 0 = 1

(0, 707 + 0, 707i) 0 = i

11

Abbildung 2: Skizze zur Konstruktion des n¨achsten Omegas Wir haben das Dreieck mit den Seiten

Abbildung 2: Skizze zur Konstruktion des n¨achsten Omegas

Wir haben das Dreieck mit den Seiten x r , y r und der Seite c = 1. Betrachten wir nun das

Dreieck, welches den halben Winkel hat und y r+1 = y r . Hier sind c =c und

x r+1 =x r :

Das die Winkel GUω r+1 und ω r+1 r jeweils den Wert α/2 haben ist klar, denn hiervon

gehen wir aus. Da die Winkelsumme in einem Dreieck 180 ist, folgt, dass der Winkel = 180(90+ α ) = 90α

Da und zusammen 90 ergeben, folgt, dass = 90 = 90 (90 α ) =

2

2 .

2

α . Somit hat das

2

Dreieck ω r+1 r zwei gleiche Winkel und folglich auch zwei gleiche Seiten, d.h. d = c r = 1 Um den Punkt ω r+1 zu finden, gehen wir von ω einfach eins nach rechts. Hier ist naturlich¨ c r+1 =1, wir brauchen allerdings ω r+1 mit c r+1 = 1. Wir teilen also alle Seiten unseres “neuen”

Dreiecks GUω r+1 durch die L¨ange von c r+1 . Was ist diese L¨ange? Durch den Satz des Pythagoras

. Wir wissen

=

2x r + 2 = 2(x r + 1).

nun also x r + 1 durch 2(x r + 1) teilen, um x r+1 zu erhalten. Wir bekommen

somit x r+1 =

Somit haben wir die erste Formel schon gekl¨art. Betrachten wir nun y r+1 . Hier teilen wir nur

Hier k¨onnen

wir x r+1 einsetzen. Wir erhalten y r+1 =

y r durch 2(x r + 1), somit erhalten wir: y r+1 =

erhalten wir: c r+1 = (x r + 1) 2 + aus dem anderen Dreieck, dass x r + y

2

y

2

r

2

r

Wir mussen¨

x r +1 2(x r +1) =

2

(x r +1)

2(x r +1) =

= x r + 2x r + 1 + y

2

=

2

c r

(x r +1)

2(x r

+1) = (x r +1)

2

y

r

2x r+1 .

2(x r +1) =

y

r

2

r

= 2x r + 1 + x r + y

2

2

r

= 1, d.h. wir haben: c r+1

2

.

y

r

q 4(x r +1)

2

=

= 2x r + 1 + 1 2

y r

2 q (x r +1)

2

12

2.4

Die Diskrete Fourier Transformation

Die normale Diskrete Fourier Transformation der Folge (a 0 , a 1 ,

aˆ s =

K1

t=0

ω st a t

, a K1 ) ist gegeben durch

(10)

bei 0 s < K [4] . Hierbei ist ω eine primitive K-te Einheitswurzel, wobei

ω = e

2πi

K

(11)

genommen wird. [5] [1] Ein Beispiel zur DFT: Hat man die Folge (12, 3, 5) = (a 2 , a 1 , a 0 ), so ist n = 3. Da K 2n 1

nimmt man k = 3 und K = 2 k = 2 3 = 8. Deshalb erweitert man die Folge zu (0, 0, 0, 0, 0, 12, 3, 5) =

(a 7 , a 6 ,

, a 1 , a 0 ). Man m¨ochte nun z. B. aˆ 3 herausfinden:

aˆ 3 =

7

t=0

ω 3t a t = a 0 + ω 3 a 1 + ω 6 a 2 + ω 9 a 3 + ω 12 a 4 + ω 15 a 5 + ω 18 a 6 + ω 21 a 7

Der Wert fur¨ ω wird folgendermaßen berechnet:

(12)

2πi

ω = e K

= ω = e

2πi

8

= 0, 707106781

Wir bekommen nun folgende Werte:

+ 0, 707106781

i

(13)

Bei t = 0 bekommen wir ω 30 a 0 = 1 5 = 5

Bei t = 1 bekommen wir ω 31 a 1 = ω 3 3 = 2, 12132034 + 2, 12132034i

Bei t = 2 bekommen wir ω 32 a 2 = ω 6 12 = 12i

Bei t = 3 bekommen wir ω 33 a 3 = ω 9 0 = 0

Bei t = 4 bekommen wir ω 34 a 4 = ω 12 0 = 0

Bei t = 5 bekommen wir ω 35 a 5 = ω 15 0 = 0

Bei t = 6 bekommen wir ω 36 a 6 = ω 18 0 = 0

Bei t = 7 bekommen wir ω 37 a 0 = ω 21 0 = 0

Zusammenaddiert ergibt sich aˆ 3 = 52, 12132034+2, 12132034i12i = 2, 878679669, 87867966i - dies ist das dritte Element der Fourier Transformierten der Reihe (a 7 , a 6 , a 5 , a 4 , a 3 , a 2 , a 1 , a 0 ).

14

2.5

Die Fast Fourier Transformation

Ist K eine Zweierpotenz, und zwar K = 2 k so kann die Diskrete Fourier Transformation schneller berechnet werden (deswegen wurde K oben eingefuhrt).¨ Wir definieren zun¨achst einmal:

A [j+1] (s k1 ,

,

s kj1 , t kj2 ,

t 0 ) ←−

,

, t 0 ) + A [j] (s k1 ,

A [j] (s k1 ,

,

s kj , 0, t kj2 ,

und:

A

wobei t = (t k1

[0]

(t k1 ,

,t

0 ) = a t

t

0

) 2 .

,

s kj , 1, t kj2 ,

,

t 0 ) ω 2 kj1 (s kj1

s

k1 ) 2

Anmerkung: der Pfeil ←− ist der Substitutionsoperator, a ←− b bedeutet, dass der Wert von a durch den aktuellen Wert von b ersetzt werden soll. Wir erhalten:

A

wobei s = (s 0 s 1

Wie k¨onnen wir das beweisen? Nehmen wir an, wir haben bewiesen, dass:

[k]

(s

k1

s

0 ) = aˆ s

s

k1 )

A

[j]

(s k1 ,

,s

kj ,t kj1 ,

,t

0 ) =

0t k1 ,

,t

kj 1

ω 2 kj (s kj

s

k1 ) 2 (t k1

Dies l¨asst sich fur¨ z.B. j = 1 schnell uberpr¨

Dann k¨onnen wir nach der Formel oben einsetzen und erhalten somit:

ufen.¨

A [j+1] (s k1 ,

,

s kj1 , t kj2 ,

, t 0 ) =

ω 2 kj (s kj

s

k1 ) 2 (t k1

t

kj ) 2 a t 0 +

0t k1 ,

,t

kj 1

ω 2 kj1 (s kj1

s

k1 ) 2

0t k1 ,

,t

kj 1

ω 2 kj (s kj

s

Hierbei ist gemeint t = (t k1

t

kj1

t

0 ) 2 , wobei bei t 0 , eben t kj1

t

kj ) 2 a t

k1 ) 2 (t k1

t

(14)

kj ) 2 a t 1

= 0 und bei t 1 ist

t kj1 = 1.

Versuchen wir nun, diese Formel so umzuformen, dass wir nur , die dasselbe ist, allerdings mit einer Summenformel. Die beiden Summen an sich kann man zusammenfassen, indem man noch t kj1 hinzufugt:¨

0t k1 ,

,t

ω 2 kj (s kj

kj1 1

s

k1 ) 2 (t k1

t

kj ) 2 a t

Das hier ist jetzt allerdings nicht gleich der Formel oben, da noch die Multiplikation mit der Potenz von ω fehlt, wenn t kj1 = 1. Formen wir zun¨achst die gerade erhaltene Formel um. Wir machen bei den ts einen Shift um

eine Stelle, d.h. wir multiplizieren mit 2. Dafur¨ ziehen wir vom Exponenten von 2 noch 1 ab, damit der Wert sich nicht ver¨andert.

0t k1 ,

,t

ω 2 kj1 (s kj

kj1 1

s

k1 ) 2 (t k1

t

kj 0) 2 a t

Nun k¨onnen wir bei den s auch noch s kj1 einsetzen, da der Wert, der zus¨atzlich entstehen

wenn s kj1 = 1 w¨are, ist ω 2 kj1 (s kj1 2 j )2 = ω 2 k s kj1 (die Multiplikation mit 2, da

wurde,¨

der Wert der ts mindestens 2 ist). Wegen der primitiven Einheitswurzel ist dies gleich 1:

0t k1 ,

,t

ω 2 kj1 (s kj1

kj1 1

s

k1 ) 2 (t k1

t

kj 0) 2 a t

Wenn wir nun 0 mit t kj1 ersetzen, dann wird, wenn t kj1 = 1, mit ω 2 kj1 (s kj1 zus¨atzlich multipliziert, genau das, was oben noch fehlte! Somit erhalten wir nun, dass:

s k1 ) 2

A [j+1] (s k1 ,

,

s kj1 , t kj2 ,

, t 0 ) =

0t k1 ,

,t

kj1 1

ω 2 kj1 (s kj1

s

k1 ) 2 (t k1

t

kj1 ) 2 a t

(15)

Das ist wieder die Form, von der wir oben ausgegangen sind, nur mit j + 1 anstatt von j (14).

16

Im n¨achsten Schritt errechnen wir zuerst die Fourier Transformation von a uber¨ die schnelle Fourier Transformation (FFT), wozu wir zun¨achst eine Tabelle fur¨ die A’s errechnen. Die erste Spalte (fur¨ A [0] ) ist simpel, wir setzen einfach die a’s ein.

(u, v, w) =

(0, 0, 0)

(0, 0, 1)

(0, 1, 0)

(0, 1, 1)

(1, 0, 0)

(1, 0, 1)

(1, 1, 0)

(1, 1, 1)

A [0] (u, v, w) =

4

9

6

2

0

0

0

0

Nun mussen¨

wir die A [1] (u, v, w) entsprechend substituieren und dann ausrechnen. Machen wir uns

also folgende Liste (2 k1 wird hierbei gleich durch 4 ersetzt.):

A [1] (0, 0, 0) ←− A [0] (0, 0, 0) + ω 40 A [0] (1, 0, 0)

A [1] (0, 0, 1) ←− A [0] (0, 0, 1) + ω 40 A [0] (1, 0, 1)

A [1] (0, 1, 0) ←− A [0] (0, 1, 0) + ω 40 A [0] (1, 1, 0)

A [1] (0, 1, 1)

←− A [0] (0, 1, 1) + ω 40 A [0] (1, 1, 1)

A [1] (1, 0, 0) ←− A [0] (0, 0, 0) + ω 41 A [0] (1, 0, 0)

A [1] (1, 0, 1) ←− A [0] (0, 0, 1) + ω 41 A [0] (1, 0, 1)

A [1] (1, 1, 0) ←− A [0] (0, 1, 0) + ω 41 A [0] (1, 1, 0)

ω 41 A [0] (1, 1, 1)

A [1] (1, 1, 1) ←− A [0] (0, 1, 1)

+

Setzen wir nun unsere schon erhaltenen Werte ein und rechnen aus, so k¨onnen wir unsere Tabelle folgendermaßen erg¨anzen:

(u, v, w) =

(0, 0, 0)

(0, 0, 1)

(0, 1, 0)

(0, 1, 1)

(1, 0, 0)

(1, 0, 1)

(1, 1, 0)

(1, 1, 1)

A [0] (u, v, w)

= 4

9

6

2

0

0

0

0

A [1] (u, v, w) =

4

9

6

2

4

9

6

2

Fertigen wir wieder eine Liste zu A [2] an (2 k2 ist hierbei schon durch 2 ersetzt).

A [2] (0, 0, 0) ←− A [1] (0, 0, 0) + ω 20 A [1] (0, 1, 0)

A [2] (0, 0, 1) ←− A [1] (0, 0, 1) + ω 20 A [1] (0, 1, 1)

A [2] (0, 1, 0) ←− A [1] (0, 0, 0) + ω 22 A [1] (0, 1, 0)

A [2] (0, 1, 1) ←− A [1] (0, 0, 1) + ω 22 A [1] (0, 1, 1)

A [2] (1, 0, 0) ←− A [1] (1, 0, 0) + ω 21 A [1] (1, 1, 0)

A [2] (1, 0, 1) ←− A [1] (1, 0, 1) + ω 21 A [1] (1, 1, 1)

A [2] (1, 1, 0) ←− A [1] (1, 0, 0) + ω 23 A [1] (1, 1, 0)

A [2] (1, 1, 1) ←− A [1] (1, 0, 1) + ω 23 A [1] (1, 1, 1)

Hier sieht man auch sehr sch¨on, wir das s immer mehr Ziffern umfasst. Bei A [1] war es nur die Ziffern in der Klammer ganz links, hier sind es zwei Ziffern, außerdem waren oben die linken Spalten immer 0 oder 1, hier sind es die mittleren Spalten.

17

Wenn wir nun fur¨ j = k einsetzen, dann erhalten wir:

A

und somit:

A

Wenn wir jetzt s und t einsetzen (siehe oben), erhalten wir:

A

Dies ist genau die Definition der diskreten Fourier Transformation!

[k]

(s k1 ,

ω 2 kk (s kk

t

0 ) 2 a t

s

k1 ) 2 (t k1

,s

,s

,s

kk ,t kk1 ,

,t

0 ) =

0 ) =

0t k1 ,

,t

K1

t=0

ω st a t

0 ) =

0 1

t

0t k1 ,

ω (s 0

,t

kk 1

[k]

(s k1 ,

s

k1 ) 2 (t k1

[k]

(s k1 ,

kk ) 2 a t

Berechnen wir nun nochmals aˆ 3 . Wir brauchen dafur¨ A [3] (1, 1, 0) (da 3 im Dualsystem 011 2 ist, und dies umgedreht 110 entspricht). Schritt fur¨ Schritt (Wir ersetzen einfach immer weiter und fassen zusammen):

A [3] (1, 1, 0)

A [2] (1, 1, 0) + ω 3 A [2] (1, 1, 1)

(A [1] (1, 0, 0) + ω 6 A [1] (1, 1, 0)) + ω 3 (A [1] (1, 0, 1) + ω 6 A [1] (1, 1, 1))

[(A [0] (0, 0, 0)+ω 4 A [0] (1, 0, 0))+ω 6 (A [ 0](0, 1, 0)+ω 4 A [ 0](1, 1, 0))]+ω 3 [(A [0] (0,