Algorithme de multiplication d'entiers

{{#ifeq:||Un article de Ziki, l'encyclopédie libre.|Une page de Ziki, l'encyclopédie libre.}}
Révision datée du 7 août 2022 à 09:00 par >(:Julien:)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Les algorithmes de multiplication permettent de calculer le résultat d'une multiplication.

Graphiquement, il s'agit de transformer un rectangle multiplicateur × multiplicande en une ligne, en conservant le nombre d'éléments.

Multiplication basée sur le nombre 2

Ce type de multiplication n'utilise que des additions et des multiplications ou des divisions par 2. Elle ne nécessite pas de connaître de table de multiplication (autre que la multiplication par 2).

Multiplication basée sur la notation décimale

Ce type de multiplication utilise la décomposition décimale des nombres et nécessite de multiplier chaque chiffre du premier nombre par chaque chiffre du second. Elle nécessite de connaître les tables de multiplications d'un chiffre par un autre. Cependant, plusieurs types de disposition ont été adoptés au cours des temps.

Multiplication rapide

Les méthodes décrites dans les pages précédentes nécessitent pour la plupart de multiplier chaque chiffre du multiplicateur par chaque chiffre du multiplicande. Si ces deux nombres ont <math>n</math> chiffres, cela exige <math>n^2</math> produits : on dit que le calcul a une complexité en temps quadratique, ou en <math>\mathcal{O}(n^2)</math>.

L'apparition des ordinateurs a permis et exigé la mise au point d'algorithmes plus rapides pour les grands nombres, les premiers trouvés ayant une complexité en temps de la forme <math>O(n^{1+a})</math>, où a est un réel positif strictement inférieur à 1. Arnold Schönhage et Volker Strassen ont conjecturé en 1971 que le produit de deux entiers a une complexité en <math>O(n \log n)</math>, c'est-à-dire qu'il existe un algorithme ayant cette complexité en temps, et qu'aucun n'en a de meilleure<ref name="HarveyHoeven"/>,<ref name = "futura">Modèle:Lien web.</ref>. La meilleure complexité actuelle est depuis 2019 en <math>O(n \log n)</math> mais n'est pas utilisable en pratique car elle n'est atteinte que pour des nombres extrêmement grands, supérieurs à <math>2^{1729^{12}}</math> dans la publication d'origine<ref name="HarveyHoeven"/>,<ref name = "futura"/>. Aucun algorithme présentant une meilleure complexité que celle conjecturée n'a été trouvé et la conjecture de Schönhage et Strassen est toujours supposée valide en 2019<ref name="HarveyHoeven"/>. Tous les algorithmes ci-dessous ont été mis au point après 1960.

  • Algorithme de Karatsuba : complexité en <math>\mathcal{O}(n^{\log_2(3)})</math> soit approximativement en <math>\mathcal{O}(n^{1,585})</math> ; conçu en 1962<ref name="kara1962">Modèle:Article</ref>, c'est le premier algorithme ayant une complexité sub-quadratique<ref name="HarveyHoeven">Modèle:Article.</ref>;
  • Algorithme Toom-Cook ou "Toom3" : complexité en <math>\mathcal{O}(n^{\log_3(5)})</math> soit approximativement en <math>\mathcal{O}(n^{1,465})</math> ;
  • Algorithme de Schönhage-Strassen, méthode utilisant la transformation de Fourier rapide : complexité en <math>\mathcal{O}(n \cdot \log n \cdot \log \log n)</math>, conçu en 1971<ref name="HarveyHoeven"/>;
  • Algorithme de Fürer : complexité en <math>\mathcal{O}(n \log n K^{O(\log^* n)})</math>, où <math>\log^* n</math> désigne le logarithme itéré et <math>K</math> un nombre strictement supérieur à 1<ref name="HarveyHoeven"/>, conçu en 2007;
  • Algorithme de Harvey et van der Hoeven : en mars 2019, David Harvey et Joris van der Hoeven annoncent un algorithme de multiplication en <math>\mathcal{O}(n \log n)</math><ref>Modèle:Article.</ref>,<ref>Modèle:Lien web.</ref>. L'algorithme est publié dans les Annals of Mathematics en 2021<ref>Modèle:Article.</ref>,<ref name="HarveyHoeven"/>. Schönhage et Strassen ont prédit que n log(n) est le meilleur résultat possible, et Harvey en conclut : « ...notre travail devrait être la fin de la route pour ce problème, bien que nous ne sachions pas encore comment le prouver rigoureusement<ref>Modèle:Article</ref>. »

La plupart des processeurs récents implémentent les multiplications sous forme de circuits électroniques, mais qui ne gèrent que des entiers de taille limitée. On appelle de tels circuits des multiplieurs.

Autres multiplications

Notes et références

Modèle:Références

Voir aussi

Modèle:Palette Multiplication Modèle:Portail