Les algorithmes de multiplication d'entiers 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

modifier

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

modifier

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 multiplication d'un chiffre par un autre. Cependant, plusieurs types de disposition ont été adoptés au cours des temps.

Multiplication longue

modifier

Si un système de notation positionnelle est utilisé, une façon naturelle de multiplier des nombres est enseignée dans les écoles sous le nom de multiplication longue ou multiplication à la main, parfois appelée multiplication scolaire ou algorithme standard : multiplier le multiplicande par chaque chiffre du multiplicateur et ensuite additionner ensemble tous les résultats partiels correctement décalés. Elle nécessite de mémoriser la table de multiplication d'un chiffre par un autre.

C'est l'algorithme habituel pour multiplier à la main de grands nombres en base 10. Une personne faisant une multiplication longue sur une feuille de papier écrira tous les produits puis les additionnera ; un utilisateur d'abaque fera la somme des produits partiels dès qu'ils auront été calculés.

Exemple

modifier

Cet exemple utilise la multiplication longue pour multiplier 23 958 233 (multiplicande) par 5 830 (multiplicateur) et fournit comme résultat 139 676 498 390 (produit).

      23958233
×         5830
———————————————
      00000000 ( =  23 958 233 ×     0)
     71874699  ( =  23 958 233 ×    30)
   191665864   ( =  23 958 233 ×   800)
+ 119791165    ( =  23 958 233 × 5 000)
———————————————
  139676498390 ( = 139 676 498 390)

Multiplication rapide

modifier

Les méthodes décrites dans le précédent paragraphe nécessitent pour la plupart de multiplier chaque chiffre du multiplicateur par chaque chiffre du multiplicande. Si ces deux nombres ont   chiffres, cela exige   produits : on dit que le calcul a une complexité en temps quadratique, ou en  .

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  , où   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  , c'est-à-dire qu'il existe un algorithme ayant cette complexité en temps, et qu'aucun n'en a de meilleure[1],[2]. La meilleure complexité actuelle est depuis 2019 en   mais n'est pas utilisable en pratique car elle n'est atteinte que pour des nombres extrêmement grands, supérieurs à   dans la publication d'origine[1],[2]. 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[1]. Tous les algorithmes ci-dessous ont été mis au point après 1960.

  • Algorithme de Karatsuba : complexité en   soit approximativement en   ; conçu en 1962[3], c'est le premier algorithme ayant une complexité sub-quadratique[1] ;
  • Algorithme Toom-Cook ou "Toom3" : complexité en   soit approximativement en   ;
  • Algorithme de Schönhage-Strassen, méthode utilisant la transformation de Fourier rapide : complexité en  , conçu en 1971[1] ;
  • Algorithme de Fürer : complexité en  , où   désigne le logarithme itéré et   un nombre strictement supérieur à 1[1], 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  [4],[5]. L'algorithme est publié dans les Annals of Mathematics en 2021[6],[1]. 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 »[7].

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

modifier

Notes et références

modifier
  1. a b c d e f et g (en) David Harvey et Joris Van Der Hoeven, « Integer multiplication in time O(n log n) », HAL,‎ 18 mars 2019 (lire en ligne).
  2. a et b Céline Deluzarche, « Oubliez vos tables de multiplication : voici une nouvelle méthode bien plus efficace », sur Futura Sciences, 12 avril 2019.
  3. (en) A. Karatsuba et Yu. Ofman, « Multiplication of Many-Digital Numbers by Automatic Computers », Doklady Akademii Nauk, vol. 145,‎ 1962, p. 293–294
    traduit en anglais dans le journal Doklady Physics (en), 7 (1963), pp. 595–596
  4. (en) Kevin Hartnett, « Mathematicians Discover the Perfect Way to Multiply », Quanta Magazine,‎ 11 avril 2019 (lire en ligne, consulté le 3 mai 2019).
  5. Kheira Bettayeb, « La multiplication réinventée », sur CNRS, 15 mai 2019 (consulté le 26 juin 2019).
  6. (en) David Harvey et Joris van der Hoeven, « Integer multiplication in time   », Annals of Mathematics Second series, vol. 193, no 2,‎ 2021, p. 563-617 (DOI 10.4007/annals.2021 .193.2.4, MR 4224716).
  7. (en) Lachlan Gilbert, « Maths whiz solves 48-year-old multiplication problem », UNSW,‎ 4 avril 2019 (lire en ligne, consulté le 18 avril 2019)

Voir aussi

modifier

📚 Artikel Terkait di Wikipedia

Produit matriciel

sur un anneau, alors la multiplication par un scalaire est parfois appelée la multiplication à gauche tandis que la multiplication à droite est définie par :

Complexité de la multiplication de matrices

de la multiplication de matrices est le nombre d'opérations requises pour l'opération de produit matriciel. Les algorithmes de multiplication de matrices

Algorithme de Strassen

de l'algorithme est en O ( n 2 , 807 ) {\displaystyle O(n^{2,807})} , avec pour la première fois un exposant inférieur à celui de la multiplication naïve

Algorithme de multiplication de Booth

l’améliorant (comment ?) selon les recommandations des projets correspondants. L'algorithme de Booth a pour but de multiplier deux nombres binaires signés représentés

Multiplication

arithmétique. Pour les autres significations, voir Multiplication (homonymie). La multiplication est l'une des quatre opérations de l'arithmétique élémentaire

Complexité d'un algorithme

généralement exprimée à l'aide de la notation grand O. Par exemple, l'algorithme usuel de multiplication des entiers a une complexité de O ( n 2 ) , {\displaystyle

Algorithme galactique

en pratique. multiplication matricielle. La première amélioration par rapport à la multiplication par force brute, O(N3), est l'algorithme de Strassen

Algorithme de Karatsuba

b, c et d en deux et ainsi de suite. C'est un algorithme de type diviser pour régner. La multiplication par la base de numération (10 dans l'exemple précédent