Théorie des Nombres - TD5 Éléments de complexité - IMJ-PRG

publicité
Université Pierre & Marie Curie
Année 2011-2012
Master de mathématiques 1
Module MM020
Théorie des Nombres - TD5
Éléments de complexité algorithmique
On appelle “opération élémentaire” dans un anneau A la somme ou le produit de deux éléments de A.
On appelle “opération binaire élémentaire” la somme ou le produit de deux nombres s’écrivant avec
un seul chiffre en base 2.
On ne s’intéresse ici qu’à la complexité temporelle (temps d’éxécution de l’algorithme) et non à la
complexité spatiale (encombrement mémoire).
Exercice 1 :
a) Montrer que le nombre d’opérations binaires élémentaires pour calculer “naı̈vement” la somme
de deux entiers de moins de n chiffres (écrits en binaire) est O(n).
b) Montrer que le nombre d’opérations binaires élémentaires pour calculer “naı̈vement” le produit
de deux entiers de moins de n chiffres (écrits en binaire) est O(n2 ).
c) Montrer que le nombre d’opérations élémentaires dans Z pour calculer “naı̈vement” n! est O(n).
Quel est le nombre d’opérations binaires élémentaires correspondant ?
d) Soient a, k, n trois entiers. Montrer que le nombre d’opérations élémentaires modulo k pour calculer “naı̈vement” an modulo k est O(n) et que le nombre d’opérations binaires élémentaires
est O(n log(k)2 ). Proposer un algorithme plus efficace, montrer que le nombre d’opérations
élémentaires modulo k est alors O(log(n)) et que le nombre d’opérations binaires élémentaires
est O(log(n) log(k)2 )
Exercice 2 : (Algorithme de Karatsuba)
L’objectif de cet exercice est l’étude d’un algorithme pour le produit des nombres entiers qui est plus
rapide que la méthode naı̈ve. On fixe B ≥ 2 un entier.
a) Soient x, y ∈ N deux nombres entiers, dont l’écriture en base B compte moins de n chiffres. Soit
n
m
m
2 ≤ m < n. On écrit x = x1 B + x0 et y = y1 B + y0 les divisions euclidiennes de x et y par
m
B . Calculer le produit x.y en fonction des xi et yj .
b) Combien de multiplications de nombres de moins de m chiffres sont nécessaires au calcul de
x.y ? En déduire un algorithme de multiplication des entiers, et évaluer rapidement le nombre
d’opérations élémentaires de cet algorithme. Le comparer à l’algorithme naı̈f.
c) Avec les notations précédentes, vérifier que x1 y0 + x0 y1 = (x1 + x0 )(y1 + y0 ) − x1 y1 − x0 y0 .
d) En déduire un nouvel algorithme pour calculer x.y, en effectuant moins de multiplications. Établir
une formule de récurrence pour le nombre d’opérations élémentaires, puis évaluer ce nombre et
comparer à 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ée 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. 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éfinit φ = φn : A[X] → An par φ(P ) =: (P (1), P (ω), . . . , P (ω n−1 )). L’objectif
P de cette
i
question est de calculer efficacement φ(H), avec deg(H) < n. On écrit H(X) = n−1
i=0 ai X et
n
m
m
on pose m := 2 . On écrit les divisions euclidiennes de H par X − 1 et X + 1 : H(X) =
(X m − 1)Q0 (X) + R0 (X) et H(X) = (X m + 1)Q1 (X) + R1 (X).
1
i) Pour tout l ∈ Z, calculer H(ω l ) en fonction de R0 (ω l ) et R1 (ω l ).
ii) Calculer les coefficients de R0 et R1 en fonction des ai .
iii) On pose R1 (X) := R1 (ωX). Calculer les coefficients de R1 .
iv) Montrer que l’on peut calculer φn (H) à partir de φm (R0 ) et φm (R1 ).
v) En déduire un algorithme pour calculer φ(H) et évaluer le nombre d’opérations élémentaires
dans A nécessaires.
b) On cherche maintenant à utiliser la question a) pour calculer le produit F.G.
i) On note φe la restriction de φ aux polynômes de degré < n. Calculer la matrice de φe dans
les bases canoniques, et en déduire que φe est inversible et que son inverse se calcule en un
nombre d’opérations élémentaires égal à celui de la question a)v).
ii) En déduire un algorithme pour calculer F.G ∈ A[X], et montrer qu’il nécessite O(n log(n))
opérations élémentaires dans A.
c) On cherche maintenant à multiplier efficacement des entiers de taille n = 2k . On suppose donné
un nombre premier 2n < p < Kn (K est une constante fixée, indépendante de n) tel que
p ≡ 1 [2n] et un générateur ζ de (Z/pZ)∗ . En déduire un algorithme de multiplication des
entiers qui s’écrivent en binaire avec moins de n chiffres. Évaluer le nombre d’opérations binaires
nécessaires, et comparer à la méthode naı̈ve et à l’algorithme de l’exercice 2.
d) En déduire un algorithme pour calculer an modulo k et évaluer sa complexité (voir exercice 1,
question d) et exercice 2, question e)).
2
Téléchargement