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 anneauAla somme ou le produit de deux ´el´ements deA.
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 n chiffres (´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 n chiffres (´ecrits en binaire) est O(n2).
c) Montrer que le nombre d’op´erations ´el´ementaires dansZpour calculer “na¨ıvement”n! estO(n).
Quel est le nombre d’op´erations binaires ´el´ementaires correspondant ?
d) Soient a, k, ntrois entiers. Montrer que le nombre d’op´erations ´el´ementaires modulokpour cal- culer “na¨ıvement” an modulo k est 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 k est 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 fixeB ≥2 un entier.
a) Soientx, y∈Ndeux nombres entiers, dont l’´ecriture en baseB compte moins de nchiffres. Soit
n
2 ≤m < n. On ´ecrit x=x1Bm+x0 ety =y1Bm+y0 les divisions euclidiennes de x ety par Bm. Calculer le produitx.y en fonction desxi etyj.
b) Combien de multiplications de nombres de moins de m chiffres 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 calculerx.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 n est une puissance de 2).
e) Que donne cet algorithme pour le calcul de an modulo k(voir exercice 1, question d)) ? Exercice 3 : (Transform´ee de Fourier rapide)
Soit k ≥ 0 et n := 2k. Soit A un anneau et ω ∈A tel que ωn = 1 et ωt−1 n’est pas diviseur de 0 pour 1≤t≤n−1. SoientF, G∈A[X], tels que deg(F.G)< n. On cherche un algorithme rapide pour calculerF.G∈A[X].
a) On d´efinit φ = φn : A[X] → An par φ(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 aiXi et on pose m := n2. On ´ecrit les divisions euclidiennes de H par Xm −1 et Xm+ 1 : H(X) = (Xm−1)Q0(X) +R0(X) etH(X) = (Xm+ 1)Q1(X) +R1(X).
1
i) Pour toutl∈Z, calculerH(ωl) en fonction deR0(ωl) et R1(ωl).
ii) Calculer les coefficients deR0 etR1 en fonction des ai. iii) On poseR1(X) :=R1(ωX). Calculer les coefficients deR1.
iv) Montrer que l’on peut calculerφn(H) `a partir deφm(R0) et φm(R1).
v) En d´eduire un algorithme pour calculerφ(H) et ´evaluer le nombre d’op´erations ´el´ementaires dans An´ecessaires.
b) On cherche maintenant `a utiliser la question a) pour calculer le produit F.G.
i) On note φela restriction de φaux polynˆomes de degr´e < n. Calculer la matrice de φedans les bases canoniques, et en d´eduire que φeest inversible et que son inverse se calcule en un nombre d’op´erations ´el´ementaires ´egal `a celui de la question a)v).
ii) En d´eduire un algorithme pour calculerF.G∈A[X], et montrer qu’il n´ecessiteO(nlog(n)) op´erations ´el´ementaires dansA.
c) On cherche maintenant `a multiplier efficacement des entiers de taillen= 2k. On suppose donn´e un nombre premier 2n < p < Kn (K est une constante fix´ee, ind´ependante de n) tel que p ≡ 1 [2n] et un g´en´erateur ζ de (Z/pZ)∗. En d´eduire un algorithme de multiplication des entiers qui s’´ecrivent en binaire avec moins denchiffres. ´Evaluer le nombre d’op´erations binaires n´ecessaires, et comparer `a la m´ethode na¨ıve et `a l’algorithme de l’exercice 2.
d) En d´eduire un algorithme pour calculer an modulo k et ´evaluer sa complexit´e (voir exercice 1, question d) et exercice 2, question e)).
2