Je suis en train de mettre en œuvre Karatsuba's Multiplication algorithm en Pythonmise en œuvre Karatsubas en Python algorithme de multiplication
Voici mon code
import math
# Base
B=10
# No. of digits
n=4
# Numbers
x=1234
y=5678
def karatsuba(x,y,d):
if (x < 10 o r y < 10):
return x*y
# Partition
m=math.floor(d/2)
n=math.ceil(d/2)
x1=x//B**n
x2=x%B**n
y1=y//B**n
y2=y%B**n
a=karatsuba(x1,y1,m)
b=karatsuba(x1+x2,y1+y2,m) #Line 25
c=karatsuba(x2,y2,n)
tot = a*(B**(2*m)) + b*(B**m) + c
res=karatsuba(x,y,n)
print('%d * %d = %d' %(x, y, res))
Mais comme vous pouvez le voir dans Line 25
, lorsque nous effectuons x1+x2
et y1+y2
(en tenant compte x1
x2
, y1
, y2
sont m
chiffres) l'une ou l'autre somme peut dépasser m
chiffres. Dans ce cas, comment puis-je faire un appel récursif à karatsuba()
avec deux nombres ayant un nombre différent de chiffres. Quelqu'un peut-il donner une solution simple à cela.
Je pense que Knuth a suggéré une variante avec soustraction qui évite le débordement, mais je n'ai pas de copie de TAoCP à portée de main. –