Quelle est la complexité (sur la RAM entière standard) du calcul de la transformée de Fourier discrète standard d'un vecteur de nombres entiers?
L' algorithme classique pour les transformées de Fourier rapides , attribué de manière inappropriée [1] à Cooley et Tukey, est généralement décrit comme fonctionnant en temps . Mais la plupart des opérations arithmétiques exécutées dans cet algorithme complexe commencent par ième racines de l' unité, qui sont (pour la plupart ) évaluation irrationnelle, donc exacte en temps constant est pas raisonnable. Le même problème se pose avec l' algorithme naïf (multipliant par une matrice de Vandermonde de racines complexes d'unité).n
Il n'est même pas clair comment représenter exactement la sortie de la DFT (sous toute forme utile). En d'autres termes, il n'est pas clair que le calcul des DFT soit réellement possible!
Supposons donc que nous ayons seulement besoin de bits de précision dans chaque valeur de sortie. Quelle est la complexité du calcul de la transformée de Fourier discrète, en fonction de et ? (Pour être concret, n'hésitez pas à supposer que est une puissance de )
Ou chaque exemple de "FFT" dans la littérature signifie-t-il réellement " transformation rapide de la théorie des nombres "? [2]
Voir mes questions connexes sur la complexité de l'élimination gaussienne et les plus courts chemins euclidiens .
[1] Il faut vraiment l'appeler (un préfixe de) l'algorithme de Gauss-Runge-König-Yates-Stumpf-Danielson-Lánczos-Cooley-Tukey.
[2] Et si oui, pourquoi la plupart des manuels décrivent-ils uniquement l'algorithme des nombres complexes?
Réponses:
Cette réponse est une variante de l'analyse du premier algorithme ("Methode A") de Schönhage et Strassen pour la multiplication des entiers longs.
Supposons que nous voulons calculer une FFT de longueur . Mettez votre entrée à l'échelle de sorte que toutes les valeurs soient inférieures à 1. Supposons d'abord que nous calculons avec arithmétique à points fixes à bits ( bits après le point binaire). Soit l'unité ("complexe") de moindre position. Soit . m m δ = 2 1 / 2 - m ω = exp ( 2 π i / K )K=2k m m δ=21/2−m ω=exp(2πi/K)
1) On peut calculer des approximations telles que pour tous les . Cela peut être fait dans le temps où est le temps nécessaire pour multiplier les nombres à bits. (voir Knuth Vol.2, 3e éd., page 309). | ω ′ j - ω j | ≤ ( 2 k - 1 ) δ 0 ≤ j ≤ K - 1 O ( K M ( m ) ) M ( m ) mω′j |ω′j−ωj|≤(2k−1)δ 0≤j≤K−1 O(KM(m)) M(m) m
Si la RAM entière standard signifie un coût logarithmique, alors . Si la RAM entière standard signifie le mot RAM, alors . (Schönhage et Strassen montrent dans "Methode A" comment réduire en temps linéaire la multiplication des nombres bits en multiplication des nombres de bits . Ce dernier peut être fait à des coûts unitaires.)M ( m ) = O ( m ) m m O ( log m )M(m)=O(mlogm) M(m)=O(m) m m O(logm)
2) La FFT classique de Cooley-Tukey calcule des opérations de la forme . Nous utilisons l' arithmétique à virgule fixe à bits, ces options deviennent . Si nous connaissons et jusqu'à une erreur de , nous obtenons jusqu'à une erreur de .m a ′ = t r u n c a t e ( b ′ + ω ′ j c ′ ) b ′ c ′ ϵ a ′ 2 ϵ + 2 k δa=b+ωjc m a′=truncate(b′+ω′jc′) b′ c′ ϵ a′ 2ϵ+2kδ
3) En utilisant l'induction, il est facile de voir que nous obtenons le résultat final avec une erreur . Pour obtenir la précision à la fin, . b m ≥ k + log k + b + O ( 1 )(2k−1)⋅2kδ b m≥k+logk+b+O(1)
4) Ainsi, le temps de course final est .O(KkM(k+b))
Cela devrait également fonctionner avec des nombres à virgule flottante: 1) peut toujours être fait avec l'arithmétique à virgule fixe, 2) est également vrai pour les nombres à virgule flottante.
En arithmétique à virgule fixe, je pense que cela peut même être fait plus rapidement. D'abord, nous réduisons le calcul de la FFT à la multiplication des polynômes en utilisant l'astuce de Bluestein. La longueur des coefficients nécessaires pour obtenir la précision souhaitée doit être . Ensuite, nous réduisons la multiplication des polynômes à la multiplication des entiers longs. (Ajoutez les coefficients à un nombre long et séparez-les par des blocs de zéro de longueur .) La longueur des entiers est .O ( k + b ) O ( K ( k + b ) )O(k+b) O(k+b) O(K(k+b))
la source
Ce n'est pas une réponse complète, mais je peux vous indiquer quelques articles pertinents et expliquer en partie pourquoi il n'est pas si facile d'extraire une réponse à votre question spécifique de la littérature.
Permettez-moi de commencer par demander, pourquoi voulez-vous connaître la réponse à cette question? En règle générale, les personnes qui se soucient de ce type de problème sont celles qui sont réellement confrontées à la mise en œuvre d'une FFT haute performance pour une application pratique. Ces personnes se soucient moins de la complexité asymptotique dans certains modèles de calcul idéalisés que de la maximisation des performances sous leurs contraintes matérielles et logicielles particulières. Par exemple, les développeurs de la transformation de Fourier la plus rapide de l'Ouest écrivent dans leur article:
Ce sont des problèmes que les théoriciens ne veulent généralement pas souiller, mais ils sont d'une grande importance dans les implémentations réelles. Si un théoricien déclare: «J'ai trouvé la meilleure complexité absolue des bits asymptotiques dans le modèle RAM», le praticien pourrait dire: «C'est bien», mais peut trouver un tel résultat théorique inutile à ses fins.
Cela dit, je pense que votre meilleur pari est de regarder la littérature sur l'analyse numérique. Par exemple, Tasche et Zeuner ont examiné de près la stabilité numérique de l'algorithme FFT. Ce n'est peut-être toujours pas exactement ce que vous voulez, car le consensus général parmi les praticiens semble être que pour atteindre une certaine précision numérique, la meilleure approche pratique consiste à précalculer certains nombres appelés «facteurs de torsion» avec une grande précision. Si vous ne faites qu'une seule FFT, ce ne sera pas l'approche la plus rapide car vous n'aurez pas à amortir le coût de votre précalcul ponctuel sur un grand nombre de calculs FFT. Pourtant, leur analyse de l'erreur d'arrondi la plus défavorable devrait toujours être pertinente pour votre question.
la source