Pour Neo82
Lorsque tu veux calculer un produit de deux nombres A et B dont la décomposition en base c est :
1 2 3
|
A = Somme (pour i=0 à n) de a[i]*c**i
B = Somme (pour j=0 à n) de b[j]*c**j |
Alors le produit est donné par :
1 2 3 4
|
C = A * B = [Somme (pour i=0 à n) de a[i]*c**i] * [Somme (pour j=0 à n) de b[j]*c**j]
= Somme (pour i=0 à n et j=0 à n) de a[i]*c**i * b[j]*c**j
= Somme (pour i=0 à n et j=0 à n) de a[i]*b[j] * c**(i+j) |
Il est alors naturel de regrouper les termes correspondant à des puissances égales de c :
1 2
|
C = A * B = Somme (pour somexp=0 à 2n) de c**somexp * somme (pour i=0 à somexp) de a[i]*b[somexp-i] |
Or l’expression
somme (pour i=0 à somexp) de a[i]*b[somexp-i]
ressemble fort à une convolution qui, on le sait est faite beaucoup plus rapidement avec une transformée de Fourier.
Bien sûr, il y a des tas de détails à régler, que je ne peux expliquer ici, mais je pense que tu peux ainsi voir au moins le rapport entre la multiplication de grands nombres et la transformée de Fourier.
Par ailleurs, il est illusoire de faire des calculs exacts avec la transformée de Fourier « normale » c’est à dire avec des sinus et des cosinus qui ne sont jamais exacts. Mais il existe d’autres algorithmes qui prennent modèle sur la transformée de Fourier et qui travaillent exactement,
car en nombres entiers. En effet, l’unique propriété qui permet l’algorithme de FFT (Fast Fourier Transform) est le fait que exp(2*pi*i) = 1 (avec i*i=-1) (j’écrirai plutôt [exp(2*pi*i/n)]**n = 1). C’est aussi l’unique propriété qui permet de transformer le calcul d’une convolution en trois transformées de Fourier : deux transformées aller, une multiplication terme à terme, et une transformée retour.
L’astuce (géniale) de l’inventeur de cet algorithme, est d’avoir créé des ensembles d’entiers où une puissance de dix, k, joue un rôle particulier et tels que k**n = 1.
Chaque nombre A et B est décomposé selon une base b qui est une puissance de dix. On crée un ensemble où précisément b**n = 1. Et on peut appliquer du même coup toute la théorie des transformées de fourier, FFT, convolution etc…
C’est comme cela qu’un japonais a il y a une vingtaine d’année battu le record du nombre de décimales de pi calculées (je n’ignore pas que ce record a dû être battu à nouveau de nombreuses fois depuis, mais je serais bien étonné que tous ses challengers n’aient pris cet algorithme pour modèle depuis son invention).
En relisant, je m’aperçois que mon explication n’est pas réellement lumineuse… Navré, je n’ai pas pu faire mieux, mais j’espère qu’elle aura un peu débrousaillé le terrain. Il faut dire que c'est quand même assez compliqué à mettre en oeuvre...
@+
Partager