¿Complejidad de calcular la transformada discreta de Fourier?


18

¿Cuál es la complejidad (en la RAM entera estándar) de calcular la transformada discreta estándar de Fourier de un vector de enteros?n

El algoritmo clásico para transformaciones rápidas de Fourier , atribuidas inapropiadamente [1] a Cooley y Tukey, generalmente se describe como funcionando en tiempo . Pero la mayoría de las operaciones aritméticas realizadas en este algoritmo a empezar con complejos n th raíces de la unidad, que son (para la mayoría n ) irracional, evaluación de manera exacta en tiempo constante no es razonable. El mismo problema surge con el ingenuo algoritmo de tiempo O ( n 2 ) (multiplicado por una matriz de Vandermonde de raíces complejas de la unidad).O(nlogn)nnO(n2)

Ni siquiera está claro cómo representar la salida del DFT exactamente (en cualquier forma útil). En otras palabras, ¡no está claro que calcular DFTs sea realmente posible!

Supongamos que solo necesitamos bits de precisión en cada valor de salida. ¿Cuál es la complejidad de calcular la transformada discreta de Fourier, en función de n y b ? (Para concreción, siéntase libre de asumir que n es una potencia de 2 ).bnbn2

¿O cada instancia de "FFT" en la literatura realmente significa " transformación teórica rápida de números "? [2]

Vea mis preguntas relacionadas sobre la complejidad de la eliminación gaussiana y los caminos más cortos euclidianos .

[1] Realmente debería llamarse (algún prefijo de) el algoritmo Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey.

[2] Y si es así, ¿por qué la mayoría de los libros de texto describen solo el algoritmo de números complejos?


1
Creo que ese es su punto: en teoría, no tiene que preocuparse por , pero en cualquier implementación REAL, DEBE preocuparse por eso y por el error en el que podría incurrir. b
Suresh Venkat

1
En realidad, esta es una buena pregunta: cada bit adicional de precisión agrega a la intensidad de la señal (multiplique por 2 ). ¡Entonces creo que la pregunta será más útil si los tamaños de palabra intermedios se pueden ampliar! 3dB2
vs

3
El análisis computable ha considerado esto y preguntas relacionadas. Este artículo produce una complejidad ligada al cálculo de la transformada de Fourier en el marco de la efectividad del Tipo II de Weirauch. El límite es que es lineal en la presentación de la entrada (infinita, de valor real). Tanto la entrada como la salida son parámetros de precisión wrt definidos en este sistema, por lo que puede haber una manera de traducir esto al modelo RAM.
Aaron Sterling el

3
Eche un vistazo al Método A en el artículo de Schönhage y Strassen sobre la multiplicación de enteros. Utiliza transformadas de Fourier complejas con precisión limitada. Creo que también se describe en Knuth Vol. 2.
Markus Bläser

2
Markus, Aaron: ¿convertir a respuestas?
Suresh Venkat

Respuestas:


9

Esta respuesta es una variante del análisis del primer algoritmo ("Método A") de Schönhage y Strassen para la multiplicación de enteros largos.

Supongamos que queremos calcular una FFT de longitud . Ajustar la escala de entrada de tal manera que todos los valores son menores que 1. Supongamos primeramente que calculamos con m bits fija aritmética de punto ( m bits de después del punto binario). Vamos δ = 2 1 / 2 - m sea la unidad ( "complejo") de menos posición. Deje ω = exp ( 2 π i / K ) .K=2kmmδ=21/2mω=exp(2πi/K)

1) Uno puede calcular aproximaciones tal que | ω j - ω j | ( 2 k - 1 ) δ para todos 0 j K - 1 . Esto se puede hacer en el tiempo O ( K M ( m ) ) donde M ( m ) es el tiempo necesario para multiplicar números de m bits. (ver Knuth Vol. 2, 3ª ed., página 309).ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

Si la RAM entera estándar significa costo logarítmico, entonces . Si la RAM entera estándar significa la palabra RAM, entonces M ( m ) = O ( m ) . (Schönhage y Strassen espectáculo en "Methode A" cómo reducir en el tiempo lineal la multiplicación de m números -bit a m multiplicación de O ( log m ) números de bits. El último se puede hacer en los costos unitarios.)M(m)=O(mlogm)M(m)=O(m)mmO(logm)

2) La clásica FFT de Cooley-Tukey calcula operaciones de la forma . Utilizamos m bits aritmética de punto fijo, estos opertions convierten en un ' = t r u n c un t e ( b ' + ω ' j c ' ) . Si conocemos b y c hasta un error de ϵ , obtenemos un hasta un error de 2 ϵ + 2a=b+ωjcma=truncate(b+ωjc)bcϵa .2ϵ+2kδ

3) Utilizando la inducción, es fácil ver que obtenemos el resultado final con error . Para obtener la precisión b al final, m k + log k + b + O ( 1 ) . (2k1)2kδbmk+logk+b+O(1)

4) Así, el tiempo de ejecución final es .O(KkM(k+b))

Esto también debería funcionar con números de punto flotante: 1) todavía se puede hacer con aritmética de punto fijo, 2) también es cierto para números de punto flotante.


En aritmética de punto fijo, creo, incluso se puede hacer más rápido. Primero reducimos el cálculo de la FFT a la multiplicación de polinomios usando el truco de Bluestein. La longitud de los coeficientes necesarios para obtener la precisión deseada debe ser . Luego reducimos la multiplicación de polinomios a la multiplicación de enteros largos. (Agregue los coeficientes a un número largo y sepárelos por bloques de cero de longitud O ( k + b ) .) La longitud de los enteros es O ( K ( k + b ) ) .O(k+b)O(k+b)O(K(k+b))


O(nlog2n)

O(nlogn)O(k+b)

2
bO(logn)O(nlogn)M(O(logn))=1

Me pasó a mirar el libro de Aho, Hopcroft y Ullman sobre "El diseño y análisis de algoritmos" y discuten el algoritmo en el modelo de bits y cuestiones relacionadas con cierto detalle.
Chandra Chekuri

Pero por lo que recuerdo, solo discuten la "FFT teórica de números" en el modelo de bits.
Markus Bläser

8

Esta no es una respuesta completa, pero puedo señalar algunos documentos relevantes y también explicar parcialmente por qué no es tan fácil extraer una respuesta a su pregunta específica de la literatura.

Permítanme comenzar preguntando, ¿por qué quieren saber la respuesta a esta pregunta? Por lo general, las personas que se preocupan por este tipo de problema son las que se enfrentan a la implementación de una FFT de alto rendimiento para una aplicación práctica. Estas personas se preocupan menos por la complejidad asintótica en algún modelo computacional idealizado que por maximizar el rendimiento bajo sus limitaciones particulares de hardware y software. Por ejemplo, los desarrolladores de la Transformada de Fourier más rápida en Occidente escriben en su artículo:

La mejor opción depende de los detalles del hardware, como el número de registros, la latencia y el rendimiento de las instrucciones, el tamaño y la asociatividad de los cachés, la estructura de la tubería del procesador, etc.

Estos son problemas con los que los teóricos generalmente no quieren meterse, pero son de gran importancia en las implementaciones reales. Si un teórico declara: "He descubierto la mejor complejidad absoluta de bits asintóticos en el modelo RAM", el profesional podría decir: "Eso es bueno", pero puede encontrar un resultado tan teórico inútil para sus propósitos.

Dicho esto, creo que su mejor opción es mirar la literatura de análisis numérico. Por ejemplo, Tasche y Zeuner han examinado de cerca la estabilidad numérica del algoritmo FFT. Esto todavía no puede ser exactamente lo que quiere, porque el consenso general entre los profesionales parece ser que para lograr una cantidad dada de precisión numérica, el mejor enfoque práctico consiste en calcular previamente determinados números llamados "factores de rotación" de alta precisión. Si solo está haciendo una FFT, entonces este no será el enfoque más rápido porque no puede amortizar el costo de su precomputación única en una gran cantidad de cálculos de FFT. Aún así, su análisis del error de redondeo en el peor de los casos aún debería ser relevante para su pregunta.


11024100

1
Estoy interesado como una pregunta puramente teórica, en interés de la erudición correcta y honesta. Es bastante común leer "y aquí usamos una FFT, que como todos saben se ejecuta en tiempo O (n log n)" en medio de un algoritmo puramente combinatorio, de lo contrario se analiza en términos de recorridos de puntero y O (log n ) aritmética de enteros de bits. Si, de hecho, la convolución de enteros se puede realizar en el tiempo O (n log n) utilizando una ligera variante de la FFT, esto puede ser perdonable pero aún descuidado. Si no, cualquier pobre idiota que intente implementar el algoritmo obtendrá LA RESPUESTA INCORRECTA.
Jeffε

Y, por supuesto, no espero que la respuesta a mi pregunta tenga ningún impacto en la práctica.
Jeffε

2
Jeff, en lo que respecta a la beca honesta, ¿no es suficiente decir que la FFT requiere operaciones de anillo O (n log n)? Esa es la forma natural de medir la complejidad del algoritmo FFT. No veo la motivación para convertir todo en un modelo particular de computación. ¿Hay algún teorema que intentes probar donde es crucial hacer un seguimiento de la cantidad de bits de precisión? En cuanto a tu pobre idiota, no creo que obtenga la "respuesta incorrecta". En cualquier implementación real, la pregunta que hace aquí es muy poco probable que sea la preocupación dominante.
Timothy Chow

O(nlogn)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.