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(nlog2⁡3)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(nln⁡n)
— 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(n2log⁡n)1O(n2)O(log⁡n)
  • 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=2log2⁡16+log2⁡32=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=32⋅51×22⋅31⋅41=22⋅32⋅41⋅51
      • 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.