Concept

Algorithme de Karatsuba

En informatique, l'algorithme de Karatsuba est un algorithme pour multiplier rapidement deux nombres de n chiffres avec une complexité temporelle en O(n) ≈ O(n) au lieu de O(n) pour la méthode naïve. Il a été développé par Anatolii Alexevich Karatsuba en 1960 et publié en 1962 . Pour multiplier deux nombres de n chiffres, la méthode naïve multiplie chaque chiffre du multiplicateur par chaque chiffre du multiplicande. Cela exige donc n produits de deux chiffres. Le temps de calcul est en O(n2). En 1960, Karatsuba remarque que pour tout , le calcul naïf d'un produit : qui semble nécessiter les quatre produits ac, ad, bc et bd, peut en fait être effectué seulement avec les trois produits ac, bd et (a – b)(c – d) en regroupant les calculs sous la forme suivante : Pour de grands nombres et en prenant , la méthode peut être appliquée de manière récursive pour les calculs de ac, bd et (a – b)(c – d) en scindant à nouveau a, 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, mais 2 pour les machines) correspond à un décalage de chiffre, et les additions sont peu coûteuses en temps ; ainsi, le fait d'être capable de calculer les grandeurs nécessaires en 3 produits au lieu de 4 mène à une amélioration de complexité. Exécutons l'algorithme pour calculer le produit 1237 × 2587. Pour calculer, 1237 × 2587, on écrit 1237 × 2587 = a0 104 + (a0 + a2 - a1) 102 + a2 où a0 = 12 × 25, a1 = (12 – 37) × (25 – 87) = 25 × 62 et a2 = 37 × 87. Pour calculer 12 × 25, on écrit 12 × 25 = a0' 102 + (a0' + a2' - a1') 10 + a2' où a0' = 1 × 2, a1' = (1 – 2) × (2 – 5) = -1 × -3 et a2' = 2 × 5. Les calculs 1 × 2 = 2, 2 × 5 = 10 et -1 × -3 = 3 se réalisent en temps constant. On obtient 12 × 25 = 2 × 100 + (2 + 10 – 3) × 10 + 10 = 300. De la même façon, on obtient a1 = 25 × 62 = 1550. De la même façon, on obtient a2 = 37 × 87 = 3219. d'où 1237 × 2587 = 300 × 1002 + (300 + 3219 – 1550) × 100 + 3219 = 3000000 + 196900 + 3219 = 3200119.

À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.

Graph Chatbot

Chattez avec Graph Search

Posez n’importe quelle question sur les cours, conférences, exercices, recherches, actualités, etc. de l’EPFL ou essayez les exemples de questions ci-dessous.

AVERTISSEMENT : Le chatbot Graph n'est pas programmé pour fournir des réponses explicites ou catégoriques à vos questions. Il transforme plutôt vos questions en demandes API qui sont distribuées aux différents services informatiques officiellement administrés par l'EPFL. Son but est uniquement de collecter et de recommander des références pertinentes à des contenus que vous pouvez explorer pour vous aider à répondre à vos questions.