1.7 Die schnelle Fourier-Transformation (FFT)

Ähnliche Dokumente
Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Abschnitt: Algorithmendesign und Laufzeitanalyse

Lineare Gleichungssysteme (Teschl/Teschl 11.1)

9.2 Invertierbare Matrizen

16. All Pairs Shortest Path (ASPS)

Division Für diesen Abschnitt setzen wir voraus, dass der Koeffizientenring ein Körper ist. Betrachte das Schema

A2.3 Lineare Gleichungssysteme

Algebra und Diskrete Mathematik, PS3. Sommersemester Prüfungsfragen

Aufgabensammlung aus Mathematik 2 UMIT, SS 2010, Version vom 7. Mai 2010

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

Partitionen II. 1 Geometrische Repräsentation von Partitionen

Partialbruchzerlegung für Biologen

Lineare Gleichungssysteme

3.1.3 Newtonsche Interpolationsformel / Dividierte Differenzen

Technische Universität München. Lösung Montag WS 2013/14. (Einheitskreis, ohne Rechnung ersichtlich) (Einheitskreis, ohne Rechnung ersichtlich)

5.1 Determinanten der Ordnung 2 und 3. a 11 a 12 a 21 a 22. det(a) =a 11 a 22 a 12 a 21. a 11 a 21

Aufgaben des MSG-Zirkels 10b Schuljahr 2007/2008

Vorbereitungskurs Mathematik zum Sommersemester 2011 Tag 7

y x x y ( 2x 3y + z x + z

1.1 Teilbarkeit, Primzahlen und Teilerfremdheit

Lösung zur Klausur zu Krypographie Sommersemester 2005

Lineare Gleichungssysteme

Elemente von S n = Aut([1, n]) heißen Permutationen. Spezielle Permutationen sind Transpositionen und Zyklen. (Vergl. Skript S

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Vorlesung bzw. 23. Januar Determinanten 1. Cramersche Regel

Einführung in die Vektor- und Matrizenrechnung. Matrizen

1 Zahlentheorie. 1.1 Kongruenzen

Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: (evtl. fallen Zeilen weg, wenn das zugehörige Bit des Multiplikators 0 ist).

WURZEL Werkstatt Mathematik Polynome Grundlagen Teil II

DEUTSCHE SCHULE MONTEVIDEO BIKULTURELLES DEUTSCH-URUGUAYISCHES ABITUR ( AUF SPANISCH )

MC-Serie 11: Eigenwerte

Eine lineare Abbildung ist bijektiv, d.h. ihre Matrix ist invertierbar, falls und nur falls

Vorkurs: Mathematik für Informatiker

00. Einiges zum Vektorraum R n

Differenzengleichungen. und Polynome

Spezialfall: Die Gleichung ax = b mit einer Unbekannten x kann mit Hilfe des Kehrwerts 1 a = a 1 gelöst werden:

4 Lineare Algebra (Teil 2): Quadratische Matrizen

Projekt Systementwicklung

Numerische Integration und Differentiation

Diskrete Strukturen. Abgabetermin: 20. September 2011, 14 Uhr in die DS Briefkästen

1 Lineare Algebra. 1.1 Matrizen und Vektoren. Slide 3. Matrizen. Eine Matrix ist ein rechteckiges Zahlenschema

Brückenkurs Elementarmathematik

Aufgaben zu Kapitel 14

10. Die komplexen Zahlen.

(Man sagt dafür auch, dass die Teilmenge U bezüglich der Gruppenoperationen abgeschlossen sein muss.)

1 Definition. 2 Besondere Typen. 2.1 Vektoren und transponieren A = 2.2 Quadratische Matrix. 2.3 Diagonalmatrix. 2.

Lineare Algebra II 5. Übungsblatt

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48

Corinne Schenka Vorkurs Mathematik WiSe 2012/13

GF(2 2 ) Beispiel eines Erweiterungskörpers (1)

Tutorium Mathematik II, M Lösungen

Lösungen zum 5. Aufgabenblatt

Matrizen, Determinanten, lineare Gleichungssysteme

Elemente der Analysis II

Vorlesung. Komplexe Zahlen

Lineare Abhängigkeit

Kapitel 17. Determinanten

Lineare Gleichungssysteme

Oft kommt es darauf an, Potenzen a n mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein.

6. Rechnen mit Matrizen.

Thema14 Der Satz über inverse Funktionen und der Satz über implizite Funktionen

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Kap 5: Rang, Koordinatentransformationen

Public-Key-Algorithmen WS2015/2016

KLAUSUR ZUR LINEAREN ALGEBRA I MUSTERLÖSUNG

Algorithmentheorie Randomisierung. Robert Elsässer

2 Euklidische Vektorräume

Übungen zum Ferienkurs Lineare Algebra WS 14/15

x y f : R 2 R 3, Es gilt: Bild f = y : wobei x,y R Kern f = 0 (wird auf der nächsten Folie besprochen)

Kapitel 7. Rekursionsgleichungen. Allgemeines Iterationsmethode Klassen von Rekursionsgleichungen Erzeugende Funktionen

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens

Faktorisierung ganzer Zahlen mittels Pollards ρ-methode (1975)

1 Rechnen mit 2 2 Matrizen

Mathematische Strukturen

4. Vektorräume und Gleichungssysteme

ax 2 + bx + c = 0, (4.1)

11. Übung zur Vorlesung. Zahlentheorie. im Wintersemester 2015/16

8 Lineare Abbildungen

KLAUSUR ZUR LINEAREN ALGEBRA I 22. Februar 2008

Vektorgeometrie. Inhaltsverzeichnis. Fragen und Antworten. (bitte nur für den Eigengebrauch verwenden)

Beispiele zur schnellen Fouriertransformation

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

4.4. Rang und Inversion einer Matrix

Vektorgeometrie Layout: Tibor Stolz

5 Zwei spieltheoretische Aspekte

Geheim bleibt geheim: Computeralgebra und Verschlüsselung mit RSA

Klausurenkurs zum Staatsexamen (SS 2015): Lineare Algebra und analytische Geometrie 5

Die Taylorreihe einer Funktion

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Serie 10: Inverse Matrix und Determinante

Der Zwei-Quadrate-Satz von Fermat

1.9 Eigenwerte und Eigenvektoren

Lenstras Algorithmus für Faktorisierung

Mathematik-Lexikon. Abszisse Die x-koordinate eines Punktes -> Ordinate

Brückenkurs Mathematik

Einleitung Shor s Algorithmus Anhang. Thomas Neder. 19. Mai 2009

Erzeugende Funktionen

Matrizen. Aufgabe 1. Sei f R 2 R 3 definiert durch. x y x Berechnen Sie die Matrix Darstellung von f. Lösung von Aufgabe 1.

Beispiellösungen zur Klausur Lineare Algebra bei Prof. Habegger

Zahlen und Gleichungen

Transkript:

1.7 Die schnelle Fourier-Transformation (FFT) Polynom in Koeffizientendarstellung: A(x) = a 0 + a 1 x + a 2 x 2 +... + a n 1 x n 1 = 0 i n 1 a i x i, mit a 0,..., a n 1 Zahlenbereich Z oder R oder C. Für die Durchführung benötigen wir komplexe Zahlen. Am Schluss wird eine Alternative skizziert, die man für Berechnungen über Z benutzen kann, ohne dabei zu komplexen Zahlen überzugehen. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 1

Aufgabe: Gegeben zwei Polynome A(x) und B(x), als A(x) = a i x i und B(x) = b j x j, 0 i n 1 berechne das Polynomprodukt A(x) B(x) = C(x) = 0 j n 1 c k x k, 0 k 2n 2 d. h. berechne die Koeffizienten c k = i,j : i+j=k a ib j. Die Folge (c 0,..., c 2n 2 ) heißt auch Konvolution (a 0,..., a n 1 ) (b 0,..., b n 1 ). Naive Benutzung der Formel liefert Θ(n 2 )-Algorithmus. Ziel: O(n log n). Methode: Divide-and-Conquer. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 2

Zentraler Trick: Benutze eine weitere Darstellung von Polynomen, die Stützstellen-Darstellung. Betrachte eine Folge (x 0,..., x n 1 ) C n von verschiedenen Stützstellen. Fakt 1.7.1 ( Interpolation von Polynomen über Körpern) Zu jedem beliebigen Wertevektor (r 0,..., r n 1 ) C n gibt es genau ein Polynom A(x) = 0 i n 1 a ix i, also genau einen Koeffizientenvektor (a 0,..., a n 1 ), mit A(x k ) = r k für 0 k n 1. Es ist also egal, ob man für die Darstellung eines Polynoms seine Koeffizienten oder einen Wertevektor benutzt. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 3

Beweis von Fakt 1.7.1: Betrachte die Vandermonde-Matrix 1 x 0 x0 2 x n 1 0 1 x 1 x1 2 x n 1 1 V (x 0,..., x n 1 ) =..... 1 x n 1 xn 1 2 xn 1 n 1 Offensichtlich ist A(x 0 ) A(x 1 ). A(x n 1 ) = V (x 0,..., x n 1 ) a 0 a 1. a n 1. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 4

Die Matrix V (x 0,..., x n 1 ) hat Determinante 0 k<l n 1 (x l x k ) 0, ist also regulär. Daher hat das Gleichungssystem V (x 0,..., x n 1 ) a 0 a 1. a n 1 = r 0 r 1. r n 1 genau eine Lösung a 0 a 1. = V (x 0,..., x n 1 ) 1 r 0 r 1.. a n 1 r n 1 Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 5

Aus der Darstellung der n-fachen Polynomauswertung als Matrix-Vektor-Produkt folgt auch: Bemerkung: Die Umrechnung von (a 0,..., a n 1 ) in (r 0,..., r n 1 ) ist eine (bijektive) lineare Abbildung von C n nach C n. Um durch Interpolation die 2n 1 Koeffizienten des Produktpolynoms C(x) zu erhalten, müssen wir mit mindestens 2n 1 Stützstellen-Werte-Paaren arbeiten. Aus technischen Gründen verwenden wir 2n viele. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 6

Algorithmenplan für die Polynommultiplikation: Eingabe: Zwei Polynome A(x) und B(x) als Koeffizientenvektoren (a 0,..., a n 1 ) und (b 0,..., b n 1 ). x 0, x 1,..., x 2n 1 seien verschiedene Stützstellen. (1) Polynomauswertung: Berechne A(x k ) und B(x k ), für k = 0,..., 2n 1. (2) Berechne durch punktweise Multiplikation Werte des Produktpolynoms C(x): C(x k ) := A(x k ) B(x k ), für k = 0,..., 2n 1. (3) Interpolation: Berechne aus (C(x 0 ), C(x 1 ),..., C(x 2n 1 )) die Koeffizienten (c 0,..., c 2n 1 ) von C(x). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 7

Kosten: (a 0,..., a n 1, b 0,..., b n 1 ) (1) Auswertung (3) Interpolation (c 0,..., c 2n 1 ) A(x k ), B(x k ), 0 k 2n 1 C(x k ), 0 k 2n 1 (2) A(x k ) B(x k ) (1)?? Naiv: Jeden Wert A(x k ) separat berechnen, z. B. mit dem Horner-Schema: A(x k ) = ((... (a n 1 x k + a n 2 ) x k...) x k + a 1 ) x k + a 0 Kosten: O(n 2 ). (2) O(n). (3)?? (Auch hier: O(n 2 ) recht leicht zu erreichen.) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 8

Kosten: (a 0,..., a n 1, b 0,..., b n 1 ) (1) O(n 2 ) (c 0,..., c 2n 1 ) (3) O(n 2 ) A(x k ), B(x k ), 0 k 2n 1 C(x k ), 0 k 2n 1 (2) O(n) Unser Ziel: O(n log n) für (1) und (3). Zunächst: Auswertung, für n = 2 L Stützstellen. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 8

Ansatz: Divide-and-Conquer. Wenn n = 1, ist das Ergebnis (r 0 ) = (a 0 ). Wenn n > 1, teilen wir A(x) in zwei Teilpolynome auf: A(x) = (a 0 + a 2 x 2 + a 4 x 4 + + a n 2 x n 2 ) + x(a 1 + a 3 x 2 + a 5 x 4 + + a n 1 x n 2 ), mit den Abkürzungen ( gerade, ungerade ) A g (x) := a 0 + a 2 x + + a n 2 x n/2 1 und A u (x) := a 1 + a 3 x + + a n 1 x n/2 1 also A(x) = A g (x 2 ) + xa u (x 2 ). (1) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 9

A(x) = A g (x 2 ) + xa u (x 2 ). A g (x 2 ) und A u (x 2 ) haben nur noch den Grad n/2 1. (Inputgröße halbiert!) Originalproblem: Werte das Polynom A an den Stützstellen x 0,..., x n 1 aus. Müssen nun rekursiv A g (xj 2) und A u(xj 2 ) berechnen, für 0 j < n. Das passt aber nicht mit der Rekursion zusammen. (Ein Polynom vom Grad n/2 1 wird an n/2 Stellen ausgewertet.) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 10

Zentraler Trick: Sorge dafür, dass x0 2,..., xn 1 2 nur n/2 verschiedene Stützstellen sind. Wie kann das funktionieren? Wähle x 0,..., x n/2 1 verschieden und betrachte als Stützstellen ±x 0, ±x 1,..., ±x n/2 1, wobei die Anordnung im Stützstellenvektor wie folgt ist: (x 0,..., x n/2 1, x 0,..., x n/2 1 ). Für den Moment nehmen wir nun an, dass die Stützstellen auf jeder Ebene der Rekursion diese Eigenschaft erfüllen. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 11

Die Auswertung des Polynoms A(x) auf den Stützstellen (x 0,..., x n 1 ) (wie auf vorheriger Folie als ±-Paare gegeben) erfolgt also wie folgt: Teilen: Berechne A g (x) und A u (x), und (x 0, x 1,..., x n/2 1 ) = (x 2 0, x 2 1,..., x 2 n/2 1 ). Rekursion: Werte A g (x) mit (x 0, x 1,..., x n/2 1 ) und A u(x) mit (x 0, x 1,..., x n/2 1 ) rekursiv aus. Resultat: Zwei Wertevektoren Kombiniere: Berechne nun: A g (x 2 0 ), A g (x 2 1 ),..., A g (x 2 n/2 1 ) A u (x 2 0 ), A u (x 2 1 ),..., A u (x 2 n/2 1 ). und A(x j ) = A g (x 2 j ) + x j A u (x 2 j ), für 0 j < n/2; A(x n/2+j ) = A g (x 2 j ) x j A u (x 2 j ), für 0 j < n/2. Zentral: n/2 Multiplikationen und n Additionen im Kombinierschritt. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 12

Unter der Annahme, dass auf jeder Rekursionsebene geeignete Stützstellen gefunden werden, resümieren wir für die Laufzeit: Entscheidend ist die Anzahl C(n) der arithmetischen Operationen bei Eingaben der Länge n. Rekurrenz: C(n) { 1, falls n = 1 2 C(n/2) + cn, sonst, für eine Konstante c. Mit dem Master-Theorem, 2. Fall, ergibt sich C(n) = O(n log n). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 13

Problem: Auf oberster Rekursionsstufe: ±x 0,..., ±x n/2 1 als Plus-Minus -Paare gewählt. Im rekursiven Aufruf: x0 2,..., x n/2 1 2 müssen wieder die Eigenschaft besitzen, dass wir Plus-Minus -Paare dort finden! Trick: Nutze komplexe Zahlen! Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 14

ω sei primitive n-te Einheitswurzel, d. h. (i) ω n = 1, (ii) für 1 k n 1 gilt 0 j n 1 (iii) ω k 1, für 1 k n 1. (ω k ) j = 0. Unter einfachen weiteren Voraussetzungen sind (ii) und (iii) äquivalent: Wenn ω k = 1 ist, dann folgt 0 j n 1 (ωk ) j = n. Daher folgt (iii), wenn (ii) und n 0 gelten. Wenn ω k 1 gilt, schreiben wir: (ω k 1)( 0 j n 1 (ωk ) j ) = (ω k ) n 1 = 0. Daher folgt (ii), wenn (iii) gilt und zudem die Inversen (ω k 1) 1 existieren. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 15

In C: Eine primitive n-te Einheitswurzel ist ω := e 2πi/n = cos(2π/n) + i sin(2π/n), wobei hier i die imaginäre Einheit ist. (Beweis dieser Eigenschaft: später.) In der komplexen Zahlenebene liegt der Punkt ω also auf dem Einheitskreis, von 1 aus um den Winkel 2π/n gegen den Uhrzeigersinn verdreht. Die Potenzen ω k, 0 k n 1, liegen in gleichen Abständen auf dem Einheitskreis. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 16

i 4π n ω 2 ω 2π n 1 0 1 2π n + π i Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 17

Für n = 2 L gilt: ω 0 = 1, ω n/2 = 1. Also j {0,..., n/2 1} : ω j = ω n/2+j. Wir finden also ±-Paare. ω 2 ist selbst eine primitive Einheitswurzel für n/2. Im Rekursionsschritt werden wir wieder ±-Paare finden. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 18

16 Stützstellen. Rekursion: 8 Stützstellen. i 4π n i 4π n ω 2π n ω 2 1 0 1 1 0 1 2π n + π i 4π n + π i Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 19

Als (x 0, x 1,..., x n 1 ) wählen wir (ω 0, ω 1,..., ω n 1 ). (Beachte: ω 0 = 1, ω 1 = ω.) Gegeben A(x) = 0 i n 1 a ix i als Koeffizientenvektor (a 0, a 1,..., a n 1 ), wollen wir also die diskrete Fourier-Transformierte (r 0, r 1,..., r n 1 ) = (A(1), A(ω), A(ω 2 ),..., A(ω n 1 )) von (a 0,..., a n 1 ) berechnen. Die Operation (a 0,..., a n 1 ) (A(1), A(ω), A(ω 2 ),..., A(ω n 1 )) heißt die diskrete Fourier-Transformation. (Es gibt auch eine Fourier-Transformation für Funktionen, die auf Integralen beruht.) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 20

Algorithmus FFT (Schnelle Fourier-Transformation) Eingabe: (Koeffizienten-)Vektor (a 0,..., a n 1 ), für Zweierpotenz n; primitive n-te Einheitswurzel ω. if n = 1 then return (a 0 ); (s 0,..., s n/2 1 ) := FFT((a 0, a 2,..., a n 2 ), ω 2 ); (t 0,..., t n/2 1 ) := FFT((a 1, a 3,..., a n 1 ), ω 2 ); for j from 0 to n/2 1 do r j := s j + ω j t j ; r n/2+j := s j ω j t j ; return (r 0, r 1,..., r n 1 ). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 21

Satz 1.7.2 Algorithmus FFT berechnet die diskrete Fouriertransformierte eines Koeffizientenvektors im Bezug auf die Stützstellen (1, ω, ω 2,..., ω n 1 ), wobei ω eine primitive n-te Einheitswurzel ist, in Zeit O(n log n). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 22

Kurzer Einschub: Beweis dafür, dass ω eine n-te Einheitswurzel ist. Wissen schon, dass (i) gilt. (ii) Für jedes beliebige y gilt y j = (1 + y)(1 + y 2 )(1 + y 4 ) (1 + y 2L 1 ). (2) 0 j n 1 (Ausmultiplizieren des Produkts ergibt n = 2 L Summanden y j, bei denen jeder Exponent j {0,..., 2 L 1} genau einmal vorkommt, wegen der Eindeutigkeit der Binärdarstellung.) Wir betrachten (2) für y = ω k, für 1 k n 1. Schreibe k = u 2 l, mit u ungerade und 0 l < L. Dann ist (ω k ) 2L l 1 = ω u(2l 1) = (ω n/2 ) u = ( 1) u = 1, weil u ungerade ist. Also ist der Faktor (1 + (ω k ) 2L l 1 ) in (2) gleich 0, also ist 0 j n 1 (ωk ) j = 0. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 23

Aktueller Stand: (a 0,..., a n 1, b 0,..., b n 1 ) (1) O(n log n) (c 0,..., c 2n 1 ) (3) O(n 2 ) A(x k ), B(x k ), 0 k 2n 1 C(x k ), 0 k 2n 1 (2) O(n) Es fehlt noch: Interpolation. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 24

Auch hier ein schöner Trick. Gegeben ist (r 0,..., r n 1 ), gesucht der Koeffizientenvektor (a 0,..., a n 1 ), der M(ω) (a 0,..., a n 1 ) T = (r 0,..., r n 1 ) T erfüllt, für die Matrix M(ω) der diskreten Fourier-Transformation: M(ω) = ((ω i ) j ) 0 i,j n 1 1 1 1 1 1 ω ω 2 ω n 1 = 1 ω 2 (ω 2 ) 2 (ω 2 ) n 1.... 1 ω n 1 (ω n 1 ) 2 (ω n 1 ) n 1. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 25

Man kann die zu M(ω) inverse Matrix direkt bestimmen. Setze ω := ω n 1. Dann gilt ω ω = ω n = 1, also ist ω = ω 1. Betrachte M( ω) = (( ω i ) j ) 0 i,j n 1 1 1 1 1 1 ω ω 2 ω n 1 = 1 ω 2 ( ω 2 ) 2 ( ω 2 ) n 1.... 1 ω n 1 ( ω n 1 ) 2 ( ω n 1 ) n 1 Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 26

Wir berechnen den Eintrag z ij an Stelle (i, j) der Produktmatrix M(ω) M( ω): z ij = 0 k n 1 (ω i ) k ( ω k ) j = 0 k n 1 (ω i+(n 1)j ) k. Es gibt zwei Fälle. Wenn i = j gilt, ist ω i+(n 1)j = (ω n ) i = 1, und die Summe ist n. Wenn i > j gilt, ist ω i+(n 1)j = ω l für 1 l = i j n 1. Wenn i < j gilt, ist ω i+(n 1)j = ω l für 1 l = n (j i) n 1. Wegen Bedingung (ii): z ij = 0 k n 1 (ω l ) k = 0. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 27

Also: M(ω) M( ω) = n I n, für die n n-einheitsmatrix I n. Das heißt: M(ω) 1 = n 1 M( ω). Wenn also (r 0,..., r n 1 ) der für die Interpolation gegebene Wertevektor ist, so erhalten wir den Koeffizientenvektor als (a 0,..., a n 1 ) T = n 1 M( ω) (r 0,..., r n 1 ) T. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 28

Für die Zahl ω beobachten wir: (i) ω n = (ω n 1 ) n = (ω n ) n 1 = 1 n 1 = 1, (ii) für 1 k n 1 gilt ω k = (ω n 1 ) k = ω n(k 1) ω n k = ω n k, mit 1 n k n 1, also 0 j n 1 ( ωk ) j = 0. Das heißt: Auch ω ist eine primitive n-te Einheitswurzel. Multiplikation mit M( ω) entspricht der FFT-Operation mit ω an Stelle von ω. Wir erhalten für die Interpolation: Zeitaufwand: O(n log n). (a 0,..., a n 1 ) = n 1 FFT((r 0,..., r n 1 ), ω). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 29

Wir können nun unseren Algorithmenplan umsetzen: Algorithmus FFT-PM (Polynommultiplikation) Eingabe: (Koeffizienten-)Vektoren (a 0,..., a n 1 ), (b 0,..., b n 1 ), für Zweierpotenz n. Berechne 2n-te Einheitswurzeln ω := e πi/n und ω := ω 2n 1. (r A 0,..., r A 2n 1 ) := FFT((a 0,..., a n 1, 0,..., 0), ω); (r B 0,..., r B 2n 1 ) := FFT((b 0,..., b n 1, 0,..., 0), ω); for j from 0 to 2n 1 do r C j := r A j r B j ; (c 0, c 1,..., c 2n 1 ) := 1 2n FFT((r 0 C,..., r 2n 1 C return (c 0, c 1,..., c 2n 1 ). ), ω); Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 30

Satz 1.7.3 Algorithmus FFT-PM berechnet die Koeffizienten des Produktes zweier durch Koeffizientenvektoren gegebener Polynome in Zeit O(n log n). Beweis: Siehe vorherige Überlegungen. (Rechenaufwand: O(2n log(2n)) = O(n log n).) (a 0,..., a n 1, b 0,..., b n 1 ) (1) O(n log n) (3) O(n log n) (c 0,..., c 2n 1 ) A(x k ), B(x k ), 0 k 2n 1 C(x k ), 0 k 2n 1 (2) O(n) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 31

Für Zuhause: Es folgen weitere Anmerkungen zur Geschichte und Anwendung der FFT. (Nicht prüfungsrelevant.) Zum Üben: Berechnen Sie (x + 1) (x 2 + 1) mittels FFT! Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 32

Der FFT-Ansatz ermöglicht es auch, die diskrete Fourier-Transformierte eines Vektors sehr effizient parallel zu berechnen, entweder mit mehreren Prozessoren oder sogar in Hardware. Die Überlegungen hierzu führen auch zu einer sehr effizienten iterativen Formulierung des Algorithmus. In Algorithmus FFT können die beiden rekursiven Aufrufe unabhängig voneinander parallel durchgeführt werden (in Hardware: zwei Kopien der gleichen Schaltung nötig). Die Berechnung des Resultates (r 0,..., r n 1 ) kann sogar für alle n Werte gleichzeitig erfolgen. Eine Beispielschaltung findet man auf Seite 69 im Buch von S. Dasgupta, C. Papadimitriou, U. Vazirani, Algorithms, McGraw-Hill, 2007. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 33

Wozu eigentlich Polynommultiplikation oder Faltung c k = a i b j, für 0 k 2n 1? i,j : i+j=k Zentrales Hilfsmittel bei der Digitalen Signalverarbeitung. Offizielle Publikation: [Cooley/Tukey 1965]. Form des Algorithmus 1805 von C. F. Gauß entworfen (und zur Berechnung von Asteroidenbahnen benutzt). Erstmalig publiziert wurde eine Variante des Algorithmus von C. Runge (1903/05). (Quelle hierfür: Wikipedia kann stimmen, muss aber nicht.) Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 34

Wir stellen uns ein System vor, in dem regelmäßig Signale anfallen und (zu Ausgabesignalen) verarbeitet werden. Abtastzeitpunkte t 0, t 1,... mit festem Abstand = t i+1 t i liefern (reelle, komplexe) Signalwerte a 0, a 1, a 2,.... Ein Verarbeitungsmechanismus soll diese Messwertfolge in eine Ausgabefolge c 0, c 1, c 2,... umsetzen, mit Ausgabezeiten t 0, t 1, t 2,..., ebenso mit Abstand. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 35

Die einfachsten Mechanismen sind linear... (wenn man zwei Signalfolgen addiert, addieren sich die Ausgabefolgen, ebenso bei Multiplikation mit konstanten Faktoren) und zeitinvariant... (wenn die gleiche Signalfolge um einen Zeitschritt versetzt auftritt, ergibt sich die gleiche um versetzte Ausgabefolge). Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 36

Leicht zu sehen: Bei linearen, zeitinvarianten Signalverarbeitungs-Systemen ist durch die Ausgabefolge (b 0, b 1, b 2,...), die von einem Signal der Größe 1 bei t 0 und sonst nur Nullsignalen ausgelöst wird, die Ausgabefolge (c 0, c 1, c 2,...) auf einer beliebigen Signalfolge (a 0, a 1,...) eindeutig bestimmt, durch: c k = a i b j. i+j=k Das ist gerade die Folge der Koeffizienten des Produktpolynoms. D.h.: Lineare, zeitinvariante Reaktion auf Mess-Signale führt unmittelbar zum Problem Polynommultiplikation. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 37

Multiplikation ganzer Zahlen : Wir wollen zwei Zahlen x, y mit je N Bits multiplizieren, N ist extrem groß. Wir zerlegen die Binärdarstellung von x und y in Blöcke der Länge N. Indem wir jeweils jeden dritten Block nehmen, bilden wir aus x und y jeweils drei Zahlen, so dass x = x 0 + x 1 + x 2 und y = y 0 + y 1 + y 2 gilt und so dass x i y j als Multiplikation von Zahlen mit N Ziffern im Bereich [ N] aufgefasst werden kann. Durch die großen eingestreuten Blöcke von Nullen gibt es keine Überträge. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 38

Die Ziffern der Produkte x i y j stellen sich als die Koeffizienten eines Produktpolynoms heraus. Mit der FFT könnte man diese Ziffern der Teilprodukte in O( N log N) Multiplikationen von komplexen Zahlen ermitteln. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 39

Unter der Annahme, dass eine solche Multiplikation (durch geeignete Rundung auf komplexe Zahlen mit Darstellungslänge O( N)) in Zeit O(N) möglich ist, erhalten wir einen Gesamtzeitaufwand von O(N 3/2 log N), sogar besser als der Zeitbedarf des Karatsuba-Multiplizierers. Durch Einziehen von Rekursionsstufen lässt sich die Zeit weiter drücken; wenn man es konsequent durchführt, auf O(N 1+ε ) für beliebige konstante ε > 0 (Verfahren von Toom/Cook, z. B. im Buch The Art of Computer Programming, Vol. 2: Seminumerical Algorithms von D. Knuth beschrieben). Für den Multiplikationsalgorithmus von Schönhage und Strassen mit Kosten O(N log N log log N) sind neben der FFT noch weitere Ideen nötig. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 40

Bemerkung für C-Vektorraum-Spezialisten: Die DFT ist eine Koordinatentransformation für einen Basiswechsel im C-Vektorraum P n der Polynome vom Grad bis zu n 1. Man betrachtet ein inneres Produkt in P n : a i X i, b i X i = i i 0 i n 1 a i b i. Definiere f j (X ) als das (eindeutig bestimmte) Polynom, das f j (ω k ) = [j = k] erfüllt, für 0 k n 1. Dann ist die Standardbasis B n = (1, X, X 2,..., X n 1 ) Orthonormalbasis von P n und die Fourierbasis F n = (f 0 (X ), f 1 (X ),..., f n 1 (X )) Orthogonalbasis von P n. Die Matrix M(ω) ist die Matrix für den Basiswechsel von B n (Koeffizienten (a 0,..., a n 1 ) nach F n (Koeffizienten (A(ω 0 ),..., A(ω n 1 ))), die Matrix M(ω) 1 = 1 nm( ω) ist für den umgekehrten Basiswechsel zuständig. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 41

Für die Arbeit mit ganzen Zahlen ist die oben beschriebene FFT sehr unbequem, weil man mit komplexen Zahlen rechnen muss. In gewissen Situationen kann man FFT auch modulo m durchführen, für geeignete Teiler m, und ganz im diskreten Bereich bleiben. Fakt 1.7.4 Wenn w = 2 und n eine Zweierpotenz ist, dann gilt für m = 2 n/2 + 1: (i) w n mod m = 1 und w n/2 mod m = 1. (ii) Für 1 k n 1 gilt 0 j n 1 (w k ) j = 0. (iii) Für 1 k n 1 gilt w k 1. (iv) Es gibt ˆn, ŵ mit (n ˆn) mod m = 1 und (w ŵ) mod m = 1. Die Zahl w spielt also im Ring Z m die Rolle einer n-ten Einheitswurzel, sie besitzt eine Inverse ŵ, und auch n hat eine Inverse ˆn. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 42

Beispiel: w = 2, n = 32, m = 2 16 + 1 = 65537, ŵ = 32769, ˆn = 63489. Man kann sich überlegen, dass in dieser Situation alle Überlegungen, die wir oben für ω, ω, n, n 1 angestellt haben, für w, ŵ, n, ˆn ebenso funktionieren, wir also den FFT-Algorithmus auch mit Addition und Multiplikation modulo m benutzen können, obwohl Z m normalerweise kein Körper ist. Damit lassen sich die Koeffizienten von Produkten ganzzahliger Polynome mit FFT ohne Umweg über die komplexen Zahlen berechnen, und auch in der Situation der Multiplikation von ganzen Zahlen ist diese FFT-Version günstiger. Einzige Voraussetzung: m muss so groß sein, dass die Koeffizienten c k des Produktpolynoms schon durch den Wert c k mod m eindeutig bestimmt sind. Abschnitt 1.7 FFT Effiziente Algorithmen Sommersemester 2013 43