Komplexität der Berechnung der diskreten Fouriertransformation?


18

Wie komplex ist die Berechnung der diskreten Fourier- Standardtransformation eines Vektors von ganzen Zahlen (im Standard-Ganzzahl-RAM) ?n

Der klassische Algorithmus für schnelle Fourier-Transformationen [1] , der Cooley und Tukey unangemessen zugeschrieben wird, wird normalerweise als in -Zeit laufend beschrieben . Die meisten in diesem Algorithmus ausgeführten arithmetischen Operationen beginnen jedoch mit komplexen n- ten Wurzeln der Einheit, die (für die meisten n ) irrational sind, so dass eine genaue Auswertung in konstanter Zeit nicht sinnvoll ist. Das gleiche Problem tritt beim naiven O ( n 2 ) -Zeitalgorithmus auf (Multiplikation mit einer Vandermonde-Matrix komplexer Einheitswurzeln).O(nlogn)nnO(n2)

Es ist nicht einmal klar, wie die Ausgabe der DFT genau dargestellt werden soll (in irgendeiner nützlichen Form). Mit anderen Worten, es ist nicht klar, dass die Berechnung von DFTs tatsächlich möglich ist!

Nehmen wir also an, wir brauchen nur Bits Genauigkeit in jedem Ausgabewert. Wie komplex ist die Berechnung der diskreten Fourier-Transformation als Funktion von n und b ? (Zur Vereinfachung können Sie annehmen, dass n eine Potenz von 2 ist .)bnbn2

Oder bedeutet jede Instanz von "FFT" in der Literatur tatsächlich "schnelle zahlentheoretische Transformation "? [2]

Siehe meine verwandten Fragen zur Komplexität der Gaußschen Eliminierung und zu den euklidischen kürzesten Wegen .

[1] Es sollte wirklich der Gauß-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey-Algorithmus genannt werden.

[2] Und wenn ja, warum beschreiben die meisten Lehrbücher nur den Algorithmus für komplexe Zahlen?


1
Ich denke, das ist sein Punkt: Theoretisch müssen Sie sich keine Sorgen um , aber in jeder IST-Implementierung müssen Sie sich darüber und über den möglicherweise auftretenden Fehler Gedanken machen. b
Suresh Venkat

1
Tatsächlich ist dies eine gute Frage jedes zusätzliches Bit an Präzision fügt mit der Signalstärke (multipliziert mit 2 ). Ich denke also, dass die Frage am nützlichsten ist, wenn die Zwischenwortgrößen erweitert werden können! 3dB2
gegen

3
Berechnungsfähige Analysen haben dies und damit verbundene Fragen berücksichtigt. Dieser Aufsatz liefert eine Komplexität, die für die Berechnung der Fourier-Transformation im Rahmen von Weirauchs Typ-II-Effektivität bestimmt ist. Die Grenze ist, dass es in der Darstellung des (unendlichen, reellen) Inputs linear ist. Sowohl die Eingabe als auch die Ausgabe sind in diesem System für Genauigkeitsparameter definiert, daher kann es eine Möglichkeit geben, dies in das RAM-Modell zu übersetzen.
Aaron Sterling

3
Schauen Sie sich Methode A in der Arbeit von Schönhage und Strassen zur ganzzahligen Multiplikation an. Es werden komplexe Fourier-Transformationen mit begrenzter Genauigkeit verwendet. Ich denke, es ist auch in Knuth Vol beschrieben. 2.
Markus Bläser

2
Markus, Aaron: In Antworten konvertieren?
Suresh Venkat

Antworten:


9

Diese Antwort ist eine Variante der Analyse des ersten Algorithmus ("Methode A") von Schönhage und Strassen zur Multiplikation langer Ganzzahlen.

Angenommen, wir wollen eine FFT der Länge berechnen . Skalieren Sie Ihre Eingabe so, dass alle Werte kleiner als 1 sind. Nehmen wir zunächst an, wir berechnen mit einer m- Bit-Festkomma-Arithmetik ( m Bits nach dem Binärpunkt ). Lassen δ = 2 1 / 2 - m die ( "Komplex") Einheit der dest Position sein. Sei ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Man kann Näherungen so berechnen , dass | ω ' j - ω j | ( 2 k - 1 ) δ für alle 0 j K - 1 . Dies kann in der Zeit erfolgen O ( K M ( m ) ) , wo M ( m ) ist die benötigte Zeit zu multiplizieren m - Bit - Zahlen. (siehe Knuth Band 2, 3. Aufl., Seite 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Wenn normaler ganzzahliger RAM logarithmische Kosten bedeutet, dann ist . Wenn Standard-Integer-RAM Wort-RAM bedeutet, ist M ( m ) = O ( m ) . (Schönhage und Strassen zeigen in "Methode A", wie die Multiplikation von m- Bit-Zahlen zu m- Multiplikation von O ( log m ) -Bit-Zahlen in linearer Zeit reduziert werden kann. Letzteres ist zu Stückkosten möglich.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) Die klassische Cooley-Tukey-FFT berechnet Operationen der Form . Wir verwenden m -Bit - Festpunktarithmetik werden diese opertions a ' = t r u n c ein t e ( B ' + ω ' j c ' ) . Wenn wir b ' und c ' bis zu einem Fehler von ϵ kennen , erhalten wir a ' bis zu einem Fehler von 2 ϵ + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) Mit Hilfe der Induktion ist es leicht zu erkennen, dass wir das Endergebnis mit einem Fehler . Um am Ende die Genauigkeit b zu erhalten , ist m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Somit ist die Endlaufzeit .O(KkM(k+b))

Dies sollte auch mit Gleitkommazahlen funktionieren: 1) kann immer noch mit Festkomma-Arithmetik durchgeführt werden, 2) gilt auch für Gleitkommazahlen.


In der Festkomma-Arithmetik geht es meiner Meinung nach sogar noch schneller. Zuerst reduzieren wir die Berechnung der FFT auf die Multiplikation von Polynomen mit Bluesteins Trick. Die Länge der Koeffizienten, die benötigt werden, um die gewünschte Genauigkeit zu erhalten, sollte . Dann reduzieren wir die Multiplikation von Polynomen auf die Multiplikation langer Ganzzahlen. (Hängen Sie die Koeffizienten an eine lange Zahl an und trennen Sie sie durch Nullblöcke der Länge O ( k + b ) .) Die Länge der ganzen Zahlen ist O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))


Wenn Sie also ab Punkt (4) K = n und b = O (log n) setzen und davon ausgehen, dass das Wort RAM verwendet wird, erhalten Sie eine Laufzeit von . Recht? O(nlog2n)
Jeffs

Ja. Der zweite Algorithmus liefert sogar , vorausgesetzt, die Genauigkeit O ( k + b ) ist ausreichend. (Ich sehe keinen Punkt, warum dies nicht ausreicht, aber ich habe die Details nicht gemacht.)O(nlogn)O(k+b)
Markus Bläser

2
Übrigens, wenn so klein wie O ( log n ) ist , gibt auch der erste Algorithmus die Laufzeit O ( n log n ) an, da M ( O ( log n ) ) = 1 ist . bO(logn)O(nlogn)M(O(logn))=1
Markus Bläser

Ich habe mir zufällig das Buch von Aho, Hopcroft und Ullman über "Das Design und die Analyse von Algorithmen" angesehen und sie diskutieren den Algorithmus im Bitmodell und verwandte Themen ausführlich.
Chandra Chekuri

Aber soweit ich mich erinnere, wird im Bitmodell nur die "zahlentheoretische FFT" diskutiert.
Markus Bläser

8

Dies ist keine vollständige Antwort, aber ich kann Sie auf einige relevante Artikel verweisen und auch teilweise erklären, warum es nicht so einfach ist, eine Antwort auf Ihre spezifische Frage aus der Literatur zu extrahieren.

Lassen Sie mich zunächst fragen, warum Sie die Antwort auf diese Frage wissen möchten. Typischerweise sind die Leute, die sich für diese Art von Problem interessieren, mit der tatsächlichen Implementierung einer Hochleistungs-FFT für eine praktische Anwendung konfrontiert. Solche Leute interessieren sich weniger für asymptotische Komplexität in einem idealisierten Rechenmodell als für die Maximierung der Leistung unter ihren jeweiligen Hardware- und Software-Einschränkungen. Zum Beispiel schreiben die Entwickler der schnellsten Fourier-Transformation im Westen in ihrer Arbeit:

Die beste Wahl hängt von Hardwaredetails wie der Anzahl der Register, der Latenz und dem Durchsatz von Befehlen, der Größe und der Assoziativität von Caches, der Struktur der Prozessor-Pipeline usw. ab.

Dies sind Themen, mit denen sich Theoretiker normalerweise nicht abfinden wollen, die jedoch bei tatsächlichen Implementierungen von großer Bedeutung sind. Wenn ein Theoretiker erklärt: "Ich habe die absolut beste asymptotische Bit-Komplexität im RAM-Modell herausgefunden", könnte der Praktiker sagen: "Das ist schön", aber ein solches theoretisches Ergebnis kann für seine Zwecke unbrauchbar sein.

Trotzdem denke ich, dass Sie sich am besten die Literatur zur numerischen Analyse ansehen sollten. Beispielsweise haben Tasche und Zeuner die numerische Stabilität des FFT-Algorithmus unter die Lupe genommen. Dies ist möglicherweise immer noch nicht genau das, was Sie möchten, da der allgemeine Konsens unter den Praktikern zu sein scheint, dass es der beste praktische Ansatz ist, bestimmte Zahlen, die als "Twiddle-Faktoren" bezeichnet werden, mit hoher Genauigkeit vorab zu berechnen , um ein bestimmtes Maß an numerischer Präzision zu erzielen . Wenn Sie nur eine FFT durchführen, ist dies nicht der schnellste Ansatz, da Sie die Kosten Ihrer einmaligen Vorberechnung nicht über eine große Anzahl von FFT-Berechnungen amortisieren müssen. Ihre Analyse des Worst-Case-Abrundungsfehlers sollte dennoch für Ihre Frage relevant sein.


11024100

1
Ich interessiere mich für eine rein theoretische Frage im Interesse einer korrekten und ehrlichen Wissenschaft. Es ist durchaus üblich zu lesen, dass "und hier verwenden wir eine FFT, die bekanntlich in O (n log n) Zeit abläuft" in der Mitte eines ansonsten rein kombinatorischen Algorithmus, der ansonsten in Bezug auf Zeigerdurchläufe und O (log n) analysiert wird ) - Bit-Ganzzahlarithmetik. Wenn tatsächlich eine ganzzahlige Faltung in O (n log n) -Zeit unter Verwendung einer geringfügigen Variante der FFT durchgeführt werden kann, ist dies möglicherweise verzeihlich, aber immer noch schlampig. Wenn nicht, bekommt jeder arme Trottel, der versucht, den Algorithmus zu implementieren, DIE FALSCHE ANTWORT.
Jeffs

Und ich erwarte natürlich nicht, dass die Antwort auf meine Frage Auswirkungen auf die Praxis hat.
Jeffs

2
Jeff, was ehrliche Gelehrsamkeit betrifft, ist es nicht genug zu sagen, dass die FFT O (n log n) Ringoperationen erfordert? Dies ist die natürliche Methode, um die Komplexität des FFT-Algorithmus zu messen. Ich sehe keine Motivation, alles in ein bestimmtes Rechenmodell umzuwandeln. Gibt es ein Theorem, das Sie beweisen wollen, wo es entscheidend ist, die Anzahl der Präzisionsteile im Auge zu behalten? Was deinen armen Trottel betrifft, kaufe ich nicht, dass er die "falsche Antwort" bekommt. Bei jeder tatsächlichen Implementierung ist es sehr unwahrscheinlich, dass die Frage, die Sie hier stellen, das dominierende Anliegen ist.
Timothy Chow

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