Algorithmique et Programmation
TD n8 : 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 PA[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 Xnm+1,
Qest le quotient de la division euclidienne de Spar T.
3. Soit FA[X]avec F(0) = 1. Considérons la suite de polynômes GiA[X]définie par G0= 1 et
Gi+1 = 2GiF·G2
imod X2i+1
pour i0. Montrer que pour tour entier i0, nous avons
F·Gi1 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)) 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, n2N).
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, . . . , adA. 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, d2N).
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 Xajpour 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 PA[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 uT, 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 dNavec
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
(pjti+j1)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+j1)(pj=?) (ti+j1=?)}.
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(log m)opérations arithmétiques qui prenant en entrée Pet T
retourne un vecteur H(P, T ) = (h1, . . . , hnm+1)Nnm+1 tel que hi=Pm
j=1 eq(pj, ti+j1)
eq(a, a) = 1 et eq(a, b) = 0 si a6=b.
(b) Soit fN. 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(nmlog 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 n1, on souhaite
déterminer A(t)(x0)pour t[[0, n 1]].
1. Connaissant les coefficients b0, . . . , bn1tels que
A(x) =
n1
X
j=0
bj(xx0)j
montrer comment calculer A(t)(x0)pour t[[0, n 1]] en O(n)opérations.
2. Expliquant comment on peut trouver b0, . . . , bn1en 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) =
n1
X
r=0
ωkr
n
r!
n1
X
j=0
f(j)g(rj)
f(j) = aj·j!et
g(`) = x`
0f(`)si (n1) `0
0si 1`(n1)
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%