Quel est l'algorithme le plus rapide pour la multiplication de deux nombres à n chiffres?


21

Je veux savoir quel algorithme est le plus rapide pour la multiplication de deux nombres à n chiffres? La complexité de l'espace peut être détendue ici!


1
Êtes-vous intéressé par la question théorique ou par la question pratique?
Yuval Filmus

Les deux, mais plus enclins à la pratique!
Andy

1
Pour la question pratique, je recommande d'utiliser GMP. Si vous êtes curieux de savoir ce qu'ils utilisent, consultez la documentation ou le code source.
Yuval Filmus

Personne ne sait. Nous ne l'avons pas encore trouvé.
JeffE

Réponses:


22

L'algorithme de Fürer de Martin Fürer a désormais une complexité temporelle de qui utilise des transformées de Fourier sur des nombres complexes. Son algorithme est en fait basé sur l'algorithme de Schönhage et Strassen qui a une complexité temporelle de Θ ( n log ( n ) log ( log ( n ) ) )nlog(n)2Θ(log(n))Θ(nlog(n)log(log(n)))

D'autres algorithmes qui sont plus rapides que l'algorithme de multiplication des écoles primaires sont la multiplication de Karatsuba qui a une complexité temporelle de ≈ et l'algorithme Toom 3 qui a une complexité temporelle deO ( n 1.585 ) Θ ( n 1.465 )O(nlog23)O(n1.585)Θ(n1.465)

Notez que ce sont les algorithmes rapides. Trouver l'algorithme le plus rapide pour la multiplication est un problème ouvert en informatique.

Les références :

  1. L'algorithme de Fürer
  2. Multiplication basée sur FFT de grands nombres
  3. Transformée de Fourier Rapide
  4. Multiplication Toom-Cook
  5. Algorithme de Schönhage – Strassen
  6. Algorithme de Karatsuba

Notez le récent article de D. Harvey et J. van der Hoeven (mars 2019) décrivant un algorithme avec une complexité . O(nlnn)
hardmath

9

Notez que les algorithmes FFT répertoriés par avi ajoutent une grande constante, ce qui les rend peu pratiques pour des nombres inférieurs à des milliers + bits.

En plus de cette liste, il existe d'autres algorithmes intéressants et des questions ouvertes:

  • Multiplication temporelle linéaire sur un modèle RAM (avec précalcul)
  • La multiplication par une constante est sublinéaire ( PDF ) - cela signifie un nombre sublinéaire d'additions qui obtient pour un total decomplexité en bits. Ceci est essentiellement équivalent à une longue multiplication (où vous décalez / ajoutez en fonction du nombre des dans le nombre inférieur), qui est, mais avec unaccélération à.1O(n2)O(n2logn)1O(n2)O(logn)
  • Système de numération des résidus et autres représentations des nombres; la multiplication est un temps presque linéaire. L'inconvénient est que la multiplication est modulaire et {détection de débordement, parité, comparaison d'amplitude} sont toutes aussi difficiles ou presque aussi difficiles que la conversion du nombre en représentation binaire ou similaire et la comparaison traditionnelle; cette conversion est au moins aussi mauvaise que la multiplication traditionnelle (pour le moment, AFAIK).
    • Autres représentations:
      • [ Représentation logarithmique ]: la multiplication est l'addition de la représentation logarithmique. Exemple:
        16×32=2log216+log232=24+5=29
        • L'inconvénient est que la conversion vers et depuis la représentation logarithmique peut être aussi difficile que la multiplication ou plus difficile, la représentation peut également être fractionnelle / irrationnelle / approximative, etc. D'autres opérations (addition?) Sont probablement plus difficiles.
      • Représentation canonique : représente les nombres comme les exposants de la factorisation première. La multiplication est l'addition des exposants. Exemple:
        36×48=3251×223141=22324151
      • L'inconvénient est, nécessite des facteurs ou factorisation, un problème beaucoup plus difficile que la multiplication. D'autres opérations telles que l'ajout sont probablement très difficiles.

1
Je crois qu'une approche basée sur le théorème des résidus / chinois avec les bons modules peut conduire à des accélérations sur la multiplication traditionnelle même avec la reconversion; à un moment donné, c'était dans le chapitre 4 du TAOCP, du moins en note de bas de page. (Cela ne se rapproche toujours pas des méthodes basées sur la FFT, mais c'est une note historique intéressante)
Steven Stadnicki

@StevenStadnicki oh cool, je dois regarder ça alors; connaissez-vous la complexité?
Realz Slaw
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.