|
| |||||||||||||||||
J.W. Cooley et J.W. Tukey
Multiplication rapide par FFT
1 Retour à l’école
2 L’algorithme de multiplication rapide de deux grands entiers par FFT References 1 Retour à l’écoleSi l’on vous demande de multiplier 32*14 dans votre tête, comment allez-vous faire ? Sans doute, tout en vous rappelant douloureusement des règles enseignées a l’école primaire, utiliser 32=3*10+2, 14=10+4, puis multiplier membre à membre, gérer les retenues et tout ça. Ouf, ça parait le plus simple... Mais est-ce vraiment le plus simple ? Question bizarre, n’est-ce pas ?Depuis l’avènement des machines à calculer, c’est à dire la fin des années 40, le manque d’algorithme de multiplication efficace oblige à segmenter chaque nombre en tranches, par exemple comme à l’école. La multiplication de nombres de taille nécessite alors un temps (ou nombre d’opérations) proportionnel à sans compter l’utilisation mémoire proportionnelle à . Afin de conserver le rythme de progression du record de calcul de décimales de au cours des années 50 (voir pages Histoire ou Décimales), des améliorations théoriques et algorithmiques semblent nécessaires. C’est alors à cette époque que les choses s’accélèrent. En 1965, Cooley and Tukey introduisent sous sa forme moderne une méthode de réduction de la complexité du calcul des séries de Fourier connue aujourd’hui sous le nom de Transformée de Fourier Rapide [1]. Il semble que Gauss ait déjà deviné l’astuce de la factorisation critique dès 1805. Quel génie, celui-là... Quoi qu’il en soit, Schönhage et Strassen en tirent un algorithme de multiplication de grands entiers en compexité ce qui est considérablement mieux que [2] ! Cette page explique le fonctionnement de cet algorithme de multiplication rapide de deux grands entiers par FFT, qui a tant fait pour le calcul des décimales de ! Pour les ordis, c’est bien... Mais pour nous, finalement, euh... ce n’est pas si naturel !
2 L’algorithme de multiplication rapide de deux grands entiers par FFTSoient X et Y deux grands entiers de taille en base usuellement (ou une puissance de ).
2.1 Décomposition polynomialeOn écrit et sous forme polynomiale en les décomposant (de manière unique) dans la base où et sont donc respectivement les -ème décimales de et (). Cette opération est de complexité à peu près proportionnelle à . On cherche maintenant à effectuer “rapidement” la multiplication puis à évaluer à la fin . est polynôme de degré et peut être retrouvé par interpolation à partir de son évaluation en points, autrement dit par l’évaluation de et en ces mêmes points. Le choix des points, c’est la finesse de l’algorithme ! On utilise les racines primitives -ième de l’unité, i.e. les
car cette évaluation (qui n’est alors rien d’autre que le calcul d’une série de Fourier) peut être réalisée en complexité si est une puissance de et avec un peu d’astuce. C’est la Transformée de Fourier Rapide ou FFT en anglais.
2.2 Transformée de Fourier rapideEn conservant les notations précédentes, évaluons le polynôme et en se plaçant sous l’hypothèse que . Posons et . On obtient alors
Maintenant, il faut se rappeler que puisque est une racine -ième de l’unité, alors pour
En conséquence, évaluer aux racines -ièmes de l’unité revient à évaluer et chacun aux points et à reporter les résultats dans à l’aide de l’équation 6. Si est le nombre d’opérations élémentaires (addition, multiplication) requises pour évaluer en alors en vertu du principe précédent et de 6, on a
où le terme provient des dernières addition et multiplication requises pour obtenir à partir de et dans 6. Comme est une racine primitive -ième de l’unité, on peut réappliquer le même procédé pour chaque polynôme et . Par suite, comme est une puissance de , le processus (et donc 6) s’itère encore fois. On obtient finalement un nombre d’opérations
d’où la complexité en de la FFT. De même pour la FFT inverse, qui utilise au lieu de .
2.3 InterpolationNous avons maintenant calculé nos et pour . On forme les produits qui reviennent à des multiplications élémentaires puisque est forcément de module inférieur à d’après 1, de même pour . Comme l’on cherche à retrouver , il faut l’interpoler à partir des valeurs . Autrement dit, on cherche à résoudre le système
où
ce qui est équivalent à
où a la bonne idée d’être simple
Le calcul de n’est donc rien d’autre que le conjugué de la transformée de Fourier de , autrement dit sa transformée de Fourier inverse, dont on a vu qu’elle est en comme la FFT. On obtient alors d’où l’on tire . Cette dernière opération est à peu près en complexité car les sont déjà proches des décimales de , aux retenues près (dès que ). Toutes les retenues sont en fait calculées simultanément, puis reportées, puis on recalcule les éventuelles nouvelles retenues créées, etc... (opération appelée vectorisation). La combinaison de tous ces algorithmes et quelques menus raffinements selon les programmeurs permettent d’atteindre à peu près la borne optimale théorique de Schönhage et Strassen pour la FFT en .
References
[1] J. W. Cooley, J. W. Tukey, “An algorithm for the machine calculation of complex Fourier series”, Math. Comp. 1965, vol 19, pp. 297-301. [2] A. Schönhage, V. Strassen, “Schennelle Multiplikation grosser Zahlen”, Computing, 1971, vol. 7, pp. 281-292. Retour à la page d'accueil |