Algorithmique et Programmation
TD n◦8 : Polynômes et FFT
École normale supérieure – Département d’informatique
2014-2015
Exercice 1 Multiplication de polynômes bivariés
Donner un algorithme qui multiplie deux polynômes (representés par leur coefficients) P, Q ∈C[X, Y ]de
degrés inférieurs à nen O(n2log n)opérations élémentaires dans C.
Exercice 2 Division euclidienne rapide par la méthode de Newton
Soit Aun anneau commutatif unitaire (en pratique nous considérerons A=Zou A=ZN). Soient
S, T ∈A[X]avec deg(S) = n,deg(T) = met Tunitaire.
1. Montrer que l’algorithme classique de division euclienne de Spar Ta une complexité arithmétique
en O(n2)(i.e. le nombre d’opérations nécessaires dans l’anneau Aest en O(n2)).
2. Pour P∈A[X]et k= deg(P), nous notons Rec(P(X)) = XkP(1/X)le polynôme réciproque de
P. Montrer que
Rec(Q) = Rec(S)Rec(T)−1mod Xn−m+1,
où Qest le quotient de la division euclidienne de Spar T.
3. Soit F∈A[X]avec F(0) = 1. Considérons la suite de polynômes Gi∈A[X]définie par G0= 1 et
Gi+1 = 2Gi−F·G2
imod X2i+1
pour i≥0. Montrer que pour tour entier i≥0, nous avons
F·Gi≡1 mod X2i.
4. En déduire un algorithme pour calculer Qet le reste Rde la division euclidienne de Spar T.
5. Montrer que la complexité arithmétique de cet algorithme de division euclidienne appliqué à deux
polynômes de degrés < n est en O(M(n)) où M(n)est la complexité arithmétique du produit de
deux polynômes de degré < n de A[X](avec M(n1+n2)≥M(n1) + M(n2)pour n1, n2∈N).
Exercice 3 Multi-évaluation d’un polynôme univarié
Soit Aun anneau commutatif unitaire (en pratique nous considérerons A=Zou A=ZN). Soient
a1, . . . , ad∈A. Nous notons M(d)la complexité arithmétique du produit et de la division euclidienne de
deux polynômes de degré < d de A[X](avec M(d1+d2)≥M(d1) + M(d2)pour d1, d2∈N).
1. Supposons que d= 2kest une puissance de 2et considérons l’arbre binaire complet Tàdfeuilles
défini par :
– chacune des dfeuilles est associée à un polynôme X−ajpour j∈ {1, . . . , d};
– pour chaque nœud interne uayant les fils vet wassociés aux polynômes Mv(X)et Mw(X)
respectivement, uest associé au polynôme Mu(X) = Mv(X)·Mw(X).
Donner un algorithme pour construire l’arbre Tavec une complexité arithmétique en O(M(d) log d).
2. Soit P∈A[X]unitaire avec deg(P) = d. Donner un algorithme qui prenant en entrée P,(a1, . . . , ad)
et l’arbre T, calcule P(X) mod Mu(X)pour tout u∈T, avec une complexité arithmétique en
O(M(d) log d).
3. Déduire des questions précédentes un algorithme qui calcule P(a1), . . . , P (ad)pour tout d∈Navec
une complexité arithmétique en O(M(d) log d).
Exercice 4 Recherche de motifs
Le but de cet exercice est de proposer des algorithmes numériques de recherche de motifs (classique
ou avec jokers). Nous supposerons sans perte de généralité que l’alphabet Σ = {1, . . . , σ} ⊂ Nest un
ensemble d’entiers consécutifs.
1
1. (a) En remarquant que le motif P= (p1, . . . , pm)∈Σmapparaît à la position i∈ {1, . . . , n}de
T= (t1, . . . , tn)∈Σnsi et seulement si
m
X
j=1
(pj−ti+j−1)2= 0
proposer un algorithme de complexité O(nlog n)opérations arithmétiques pour le problème
de recherche de motifs (classique).
(b) En découpant le texte Ten n/m blocs de longueur 2m(se recouvrant partiellement), montrer
comment adapter l’algorithme précédent pour avoir une complexité en O(nlog m)opérations
arithmétiques.
2. Adapter cet algorithme pour la recherche de motifs lorsque le motif Pet le texte Tcontiennent des
caractères spéciaux jokers (?), i.e. qui détermine l’ensemble
M?? ={i∈ {1, . . . , n}|∀j∈ {1, . . . , m},(pj=ti+j−1)∨(pj=?) ∨(ti+j−1=?)}.
3. Nous allons adapter cet algorithme pour qu’il détermine le nombre de lettres communes d’un motif
à chaque position d’un texte.
(a) Donner un algorithme en O(nσ log m)opérations arithmétiques qui prenant en entrée Pet T
retourne un vecteur H(P, T ) = (h1, . . . , hn−m+1)∈Nn−m+1 tel que hi=Pm
j=1 eq(pj, ti+j−1)
où eq(a, a) = 1 et eq(a, b) = 0 si a6=b.
(b) Soit f∈N. Une lettre de Σest dite f-fréquente si elle apparaît au moins ffois dans P.
En supposant que le motif Pne contient aucune lettre f-fréquente, donner un algorithme de
complexité O(nf)(et donc indépendant de σ) qui prenant en entrée Pet Tretourne le vecteur
H(P, T ).
(c) En appliquant ces deux algorithmes en fonction de la fréquence des lettres de P, donner un
algorithme qui prenant en entrée un motif P∈Σmarbitraire et un texte T∈Σnretourne le
vecteur H(P, T )en O(n√mlog m)opérations arithmétiques.
Exercice 5 (Bonus - non vu en TD) Évaluation de toutes les dérivées d’un polynôme en
un point
À partir de la représentation par coefficients d’un polynôme A(x)de degré au plus n−1, on souhaite
déterminer A(t)(x0)pour t∈[[0, n −1]].
1. Connaissant les coefficients b0, . . . , bn−1tels que
A(x) =
n−1
X
j=0
bj(x−x0)j
montrer comment calculer A(t)(x0)pour t∈[[0, n −1]] en O(n)opérations.
2. Expliquant comment on peut trouver b0, . . . , bn−1en O(nlog n)opérations connaissant A(x0+ωk
n)
pour k∈[[0, n −1]] (où ωn=e2iπ/n).
3. Montrer que
A(x0+ωk
n) =
n−1
X
r=0
ωkr
n
r!
n−1
X
j=0
f(j)g(r−j)
où f(j) = aj·j!et
g(`) = x−`
0f(−`)si −(n−1) ≤`≤0
0si 1≤`≤(n−1)
4. Expliquer comment on peut évaluer A(x0+ωk
n)pour k∈[[0, n −1]] en O(nlog n)opérations. En
conclure que toutes les dérivées non triviales de A(x)peuvent être évaluées au point x0en O(nlog n)
opérations.
2
1 / 2 100%