TD : Multiplication de Karatsuba
Dominique Michelucci, Universit´ e de Dijon 18 septembre 2012
La m´ethode na¨ıve pour multiplier des entiers denchiffres est enO(n2). (Par contre la m´ethode na¨ıve pour additionner est lin´eaire...).
La multiplication de Karatsuba est plus rapide. Principe : pour multiplierA etB, avecAle plus grand,nchiffres dans la base utilis´ee, on ´ecritA=a0+a1Ω et B =b0+b1Ω, o`u Ω est la puissance de la base, telle que a0et a1 ont `a peu pr`esn/2 chiffres.
Calculer na¨ıvement
A×B= (a0+a1Ω)(b0+b1Ω) = (a1×b1)Ω2+ (a0×b1+a1×b0)Ω + (a0×b0) en effectuant 4 produits sur des nombres deux fois plus courts est toujours en O(n2) : en effet r´esoudre l’´equationT(n) = 4T(n/2), ou bienT(n) = 4T(n/2)+n donneT(n) =O(n2). V´erifions :
Indication de preuve. Calculons d’abord la table deT(1) = 1, T(n) = 4T(n/2) pour simplifier :
log2n n T(n)
0 1 1
1 2 4 = 22
2 4 16 = 42
3 8 64 = 82
4 16 256 = 162
Clairement T(n) = n2 =O(n2) sur ces exemples, et on le prouve trivialement par r´ecurrence. Ensuite consid´ererT(1) = 1, T(n) = 4T(n/2) +n a pour effet d’introduire des termes parasites, de plus bas degr´e, qui ne vont pas modifier le fait queT(n) =O(n2). Il vous est conseill´e de le faire, en ”travail `a la maison” ! L’id´ee de Karatsuba est de n’utiliser que 3 multiplications, au lieu de 4.
Il utilise davantage d’additions (ou soustractions), mais elles sont en temps lin´eaire.
AB= (a1×b1)Ω2+ ((a0+a1)×(b0+b1)−a1×b1−a0×b0)Ω + (a0×b0) Cette m´ethode est en O(nlog23) = O(n1.5849625007211563). C’est la solution de l’´equation de r´ecurence deT(n) = 3T(n/2) +n. V´erifions le :
Indication de preuve. Consid´erons d’abord, pour simplifier,T(1) = 1, T(n) =
1
3T(n/2). Calculons la table :
log2n n T(n)
0 1 1 = 30
1 2 3 = 31
2 4 9 = 32
3 8 27 = 33 4 16 81 = 34
Elle sugg`ere que T(n) = 3log2n, ce qui est facilement prouv´e par r´ecurrence (Faites le `a la maison !). Ensuite, il faut prouver que 3log2n=O(nlog23) :
T(n) = 3log2n. Or 3 = 2log23
= (2log23)log2n mais (ab)c=ab×c
= 2(log23)(log2n)
= 2(log2n)(log23)
= (2(log2n))log23
= nlog23=O(nlog23)
CQFD. Ensuite, consid´ererT(n) = 3T(n/2)+nne fait qu’ajouter des termes parasites, de plus bas degr´e. Faites le ”`a la maison”.
N’a t-on rien oubli´e ? Les retenues ! Il faut les propager. Montrer que ce post traitement est lin´eaire enn.
Il y a des m´etodes plus compliqu´ees et plus efficaces pour le produit, en gros enO(nlogn) (je n´eglige des facteurs log(logn)...).
Apart´ e : conversion entre log
eX et log
kX
Retrouvez la relation entre logeX et logkX, o`ue est la base naturelle des log n´ep´eriens.
Solution (`a ne pas lire tout de suite...). SoitX > 0 un nombre. Soit x = logkX ⇔ kx = klogkX = X. Soit x′ = logeX′ ⇔ ex′ = elogeX = X. Donc X =kx=ex′. D’o`u :
logeX = logekx=xlogek= (logkX)(logek) D’o`u : logkX = loglogeX
ek ou encore : loglogeX
kX = logek : tous les logarithmes sont proportionnels entre eux. Cela justifie la notationO(logb), o`u on ne pr´ecise pas la base du log.
2