Universit´
e Pierre & Marie Curie Master de math´
ematiques 1
Ann´
ee 2011-2012 Module MM020
Th´eorie des Nombres - TD5
´
El´ements de complexit´e algorithmique
On appelle “op´eration ´el´ementaire” dans un anneau Ala somme ou le produit de deux ´el´ements de A.
On appelle “op´eration binaire ´el´ementaire” la somme ou le produit de deux nombres s’´ecrivant avec
un seul chiffre en base 2.
On ne s’int´eresse ici qu’`a la complexit´e temporelle (temps d’´ex´ecution de l’algorithme) et non `a la
complexit´e spatiale (encombrement m´emoire).
Exercice 1 :
a) Montrer que le nombre d’op´erations binaires ´el´ementaires pour calculer “na¨ıvement” la somme
de deux entiers de moins de nchiffres (´ecrits en binaire) est O(n).
b) Montrer que le nombre d’op´erations binaires ´el´ementaires pour calculer “na¨ıvement” le produit
de deux entiers de moins de nchiffres (´ecrits en binaire) est O(n2).
c) Montrer que le nombre d’op´erations ´el´ementaires dans Zpour calculer “na¨ıvement” n! est O(n).
Quel est le nombre d’op´erations binaires ´el´ementaires correspondant ?
d) Soient a, k, n trois entiers. Montrer que le nombre d’op´erations ´el´ementaires modulo kpour cal-
culer “na¨ıvement” anmodulo kest O(n) et que le nombre d’op´erations binaires ´el´ementaires
est O(nlog(k)2). Proposer un algorithme plus efficace, montrer que le nombre d’op´erations
´el´ementaires modulo kest alors O(log(n)) et que le nombre d’op´erations binaires ´el´ementaires
est O(log(n) log(k)2)
Exercice 2 : (Algorithme de Karatsuba)
L’objectif de cet exercice est l’´etude d’un algorithme pour le produit des nombres entiers qui est plus
rapide que la m´ethode na¨ıve. On fixe B≥2 un entier.
a) Soient x, y ∈Ndeux nombres entiers, dont l’´ecriture en base Bcompte moins de nchiffres. Soit
n
2≤m<n. On ´ecrit x=x1Bm+x0et y=y1Bm+y0les divisions euclidiennes de xet ypar
Bm. Calculer le produit x.y en fonction des xiet yj.
b) Combien de multiplications de nombres de moins de mchiffres sont n´ecessaires au calcul de
x.y ? En d´eduire un algorithme de multiplication des entiers, et ´evaluer rapidement le nombre
d’op´erations ´el´ementaires de cet algorithme. Le comparer `a l’algorithme na¨ıf.
c) Avec les notations pr´ec´edentes, v´erifier que x1y0+x0y1= (x1+x0)(y1+y0)−x1y1−x0y0.
d) En d´eduire un nouvel algorithme pour calculer x.y, en effectuant moins de multiplications. ´
Etablir
une formule de r´ecurrence pour le nombre d’op´erations ´el´ementaires, puis ´evaluer ce nombre et
comparer `a l’algorithme na¨ıf (on pourra supposer pour commencer que nest une puissance de
2).
e) Que donne cet algorithme pour le calcul de anmodulo k(voir exercice 1, question d)) ?
Exercice 3 : (Transform´ee de Fourier rapide)
Soit k≥0 et n:= 2k. Soit Aun anneau et ω∈Atel que ωn= 1 et ωt−1 n’est pas diviseur de 0
pour 1 ≤t≤n−1. Soient F, G ∈A[X], tels que deg(F.G)< n. On cherche un algorithme rapide pour
calculer F.G ∈A[X].
a) On d´efinit φ=φn:A[X]→Anpar φ(P) =: (P(1), P (ω), . . . , P (ωn−1)). L’objectif de cette
question est de calculer efficacement φ(H), avec deg(H)< n. On ´ecrit H(X) = Pn−1
i=0 aiXiet
on pose m:= n
2. On ´ecrit les divisions euclidiennes de Hpar Xm−1 et Xm+ 1 : H(X) =
(Xm−1)Q0(X) + R0(X) et H(X) = (Xm+ 1)Q1(X) + R1(X).
1