• Aucun résultat trouvé

Solution de relations de r´ ecurrence

Dans le document Notes de programmation (C) et d'algorithmique (Page 114-120)

A11 A12 A21 A22  B =  B11 B12 B21 B22 

o`u Aij et Bij ont dimension n/2 × n/2. Ensuite on calcule :

C =  C11 C12 C21 C22  o`u : C11 = A11· B11+ A12· B21 C12 = A11· B12+ A12· B22 C21 = A21· B11+ A22· B21 C22 = A21· B12+ A22· B22 . On v´erifie que : C = A · B. On a donc un coˆut :

C(n) = 8 · C(n/2) + O(n2) .

Encore une fois, ceci est plus compliqu´e que l’algorithme standard et a la mˆeme complexit´e asymptotique. Cependant, V. Strassen [Str69] a montr´e que l’on peut s’en sortir avec 7 mul-tiplications (d´etails non-triviaux dans [CLRS09]). On a donc :

C(n) = 7 · C(n/2) + O(n2) .

Ce qui m`ene `a une am´elioration significative de la complexit´e asymptotique et mˆeme `a un algorithme pratique pour n de l’ordre de 102(voir [CLRS09]). Une petite course `a la meilleure borne asymptotique a suivi. Actuellement le record est autour de O(n2,3) mais l’algorithme en question n’est pas du tout pratique ! Rappelons au passage que si l’on travaille avec les flottants, il faut aussi ´evaluer la stabilit´e num´erique de l’algorithme.

15.2 Solution de relations de r´ecurrence

Proposition 6 Pour borner la solution de la relation de r´ecurrence : C(n) = a · C(n/b) + O(nc), C(0) = O(1), il suffit de consid´erer le ratio :

r = a bc . A savoir :

si r = 1 alors C(n) = O(nc· log n) , si r < 1 alors C(n) = O(nc) , si r > 1 alors C(n) = O(nlogba) .

Remarque 15 Ce qu’on pr´esente est une version a-b-c (ou bac) d’un th´eor`eme plus g´en´eral dˆu `a Akra-Bazzi [AB98] qu’on appelle aussi master theorem.

Avant de proc´eder avec la preuve, consid´erons l’application de la proposition aux exemples. Dichotomie C(n) = 1 · C(n/2) + O(1) a = 1, b = 2, c = 0, r = 1 C(n) = O(log n) Fusion C(n) = 2 · C(n/2) + O(n) a = 2, b = 2, c = 1, r = 1 C(n) = O(n log n) Karatsuba C(n) = 3 · C(n/2) + O(n)

a = 3, b = 2, c = 1, r > 1 C(n) = O(nlog23) ≈ O(n1,6)

Strassen C(n) = 7 · C(n/2) + O(n2)

a = 7, b = 2, c = 2, r > 1 C(n) = O(nlog27) ≈ O(n2,8)

Plus rare C(n) = 2 · C(n/2) + O(n2)

a = 2, b = 2, c = 2, r < 1 C(n) = O(n2)

Preuve de la proposition 6

Pour simplifier la notation, on suppose que : — n est une puissance de b.

— k borne les constantes du cas terminal et du travail de division et de combinaison. On a donc :

C(n) ≤ a · C(n/b) + k · nc ,

C(0) ≤ k .

Consid´erons maintenant le travail de division et combinaison qu’on effectue `a chaque niveau :

niveau travail 0 a0· k · nc 1 a1· k · (n/b1)c · · · · j aj · k · (n/bj)c · · · ·

logbn alogbn· k · (n/blogbn)c Il en suit que le travail tj au niveau j est :

tj = k · nc· rj

o`u r = bac. Le ratio fait dont son apparition ! On distingue maintenant les 3 cas.

r = 1 : travail constant `a chaque niveau On a : tj = k · nc. En additionnant le (logbn + 1 niveaux) on obtient :

C(n) = O(nclog n) .

r < 1 : le travail du niveau 0 domine On a :

Σj=0,...,logbntj = k · nc· Σj=0,...,logbnrj

≤ k · nc·1−r1 . Donc :

Relations de r´ecurrence 115

r > 1 : le travail des feuilles domine D’abord on remarque pour h = logbn :

Σj=0,...,hrj = r h+1− 1 r − 1 ≤ r h r r − 1 . Donc pour k0= r/(r − 1) on a : Σj=0,...,logbntj ≤ k · nc· rh· k0 . En explicitant h et r : k · k0· nc·a bc logbn = k · k0· nc·a logbn nc . Rappel : logax = logbx

logba. Donc :

C(n) = O(alogbn) = O(nlogba) .

Notez que alogbn est le nombre de feuilles. 2

Remarque 16 La proposition 6 s’applique si l’on divise un probl`eme de taille n dans un nombre a de sous-probl`emes qui ont la mˆeme taille n/b. Elle ne s’applique pas, par exemple, au tri rapide (voir section 17.2) car les sous-probl`emes n’ont pas forcement la mˆeme taille. Exercice 17 On peut repr´esenter un nombre entier de taille arbitraire comme une liste de chiffres en base B. Par simplicit´e, supposons B = 10. Programmez les op´erations d’addition et multiplication de l’´ecole primaire ainsi que la multiplication de Karatsuba et d´eterminez le nombre de chiffres n´ecessaires pour que la multiplication de Karatsuba soit plus efficace que la multiplication de l’´ecole primaire en pratique.

Chapitre 16

Transform´ee de Fourier rapide

Un polynˆome peut ˆetre repr´esent´e par ses coefficients ou par un ensemble de points. On peut voir la transform´ee (discr`ete) de Fourier comme une m´ethode pour passer de la repr´esentation par coefficients `a celle par points alors que la transform´ee inverse de Fou-rier passe des points aux coefficients. Un algorithme direct permet de mettre en oeuvre ces op´erations en O(n2). En choisissant les points comme les racines n-aires de l’unit´e, il est pos-sible, en suivant une strat´egie diviser pour r´egner (voir chapitre 15), de r´eduire la complexit´e `

a O(n · log(n)) [CT65]. Dans ce cas, on parle de transform´ee (ou transform´ee inverse) rapide (Fast Fourier Transform ou FFT en anglais). Cet algorithme joue un rˆole tr`es important, par exemple, dans le traitement num´erique du signal.

16.1 Polynˆomes et matrice de Vandermonde

Soit p(x) = Σk=0,...,n−1aixi un polynˆome sur un corps. On peut ´evaluer un polynˆome dans un point en effectuant O(n) multiplication et additions. En particulier, on peut utiliser la r`egle de Horner :

p(x) = a0+ x(a1+ x(a1+ · · · + (xan) · · · )) (16.1) Il en suit qu’on peut ´evaluer p(x) en n points x0, . . . , xn−1 en O(n2).

D´efinition 13 (matrice Vandermonde) La matrice de Vandermonde Vn pour les points x0, . . . , xn−1 est d´efinie par :

    1 x0 x20 · · · xn−10 1 x1 x21 · · · xn−11 · · · · 1 xn−1 x2n−1 · · · xn−1n−1     (16.2)

Des manipulations standards d’alg`ebre lin´eaire permettent d’expliciter le d´eterminant de la matrice Vn.

Fait 1 Le d´eterminant de la matrice de Vandermonde Vn est :

det (Vn) = Π0≤i<j≤(n−1)(xj − xi) . (16.3)

Il suit que si les points x0, . . . , xn−1 sont diff´erents alors la matrice Vn est inversible.

Proposition 7 Soient (xk, yk) des couples de points pour k = 0, . . . , n − 1 et avec xi6= xj si i 6= j. Alors il existe unique un polynˆome p(x) de degr´e au plus n − 1 tel que p(xk) = yk pour k = 0, . . . , n − 1.

Preuve. L’assertion que p(xk) = ykpour k = 0, . . . , n−1 est ´equivalente `a la condition Vna = y, o`u Vn est la matrice de Vandermonde relative aux points x0, . . . , xn−1, y = (y0, . . . , yn−1) et a = (a0, . . . , an−1) sont les coefficients du polynˆome `a d´eterminer. Comme Vnest inversible

on doit avoir a = (Vn)−1y. 2

Il est possible d’expliciter le polynˆome en question en utilisant l’interpolation de Lagrange.

D´efinition 14 (polynˆome interpolant) Soient (xk, yk) des couples de points pour k = 0, . . . , n − 1 et avec xi 6= xj si i 6= j. On d´efinit le polynˆome interpolant par :

`(x) = Σi=0,...,n−1yi Πj6=i(x − xj) Πj6=i(xi− xj) .

Proposition 8 Le polynˆome `(x) a degr´e au plus (n − 1) et il satisfait : `(xi) = yi pour i = 0, . . . , (n − 1).

Preuve. Il est clair que le degr´e est au plus n − 1 et on v´erifie que : Πj6=i(x − xj) Πj6=i(xi− xj) =  1 si x = xi 0 si x = xk 6= xi . 2 On peut aussi d´eriver le fait qu’un polynˆome non-nul de degr´e n − 1 a au plus n − 1 racines diff´erentes.

Proposition 9 Un polynˆome p(x) de degr´e n − 1 qui n’est pas nul partout admet au plus n − 1 points x1, . . . , xn−1 tels que p(xk) = 0 pour k = 1, . . . , n − 1.

Preuve. Si on avait n points x0, . . . , xn−1 alors on pourrait construire la matrice de Van-dermonde Vn relativement `a ces points et d´eriver Vna = 0 o`u a = (a0, . . . , an−1) sont les coefficients du polynˆome. Il en suit que a = (Vn)−10 = 0 contre l’hypoth`ese que p(x) 6= 0. 2

Op´erations et repr´esentation de polynˆomes

On peut repr´esenter un polynˆome de degr´e n − 1 par ses coefficients a0, . . . , an−1ou par sa valeur dans n points (x0, y0), . . . , (xn−1, yn−1). Il est possible de passer d’une repr´esentation `

a l’autre en O(n2). En particulier, la transform´ee de Fourier est le passage des coefficients aux points ce qui revient `a calculer y = Vna o`u Vn est la matrice de Vandermonde pour les points x0, . . . , xn−1 et a = (a0, . . . , an−1) est le vecteur des coefficients. La transform´ee de Fourier inverse est le passage des points aux coefficients ce qu’on peut faire en calculant les coefficients du polynˆome interpolant (d´efinition 14).

On discute les avantages et les inconv´enients de ces repr´esentations par rapport `a 3 op´erations fondamentales : la somme, l’´evaluation dans un point et le produit.

FFT 119

Somme Les deux repr´esentations permettent de calculer la somme de deux polynˆomes en temps lin´eaire : on additionne les coefficients et les ordonn´ees des points, respecti-vement.

´

Evaluation L’´evaluation d’un polynˆome dans un point est possible en temps lin´eaire avec la repr´esentation par coefficients (r`egle de Horner). Dans la repr´esentation par points, on peut ´evaluer dans un point le polynˆome interpolant de Lagrange mais ce calcul est O(n2).

Produit Le produit de deux polynˆomes est possible en O(n) avec la repr´esentation par points (on multiplie les ordonn´ees des points). A noter que le produit de deux po-lynˆomes de degr´e au plus n − 1 a degr´e au plus 2n − 2 et que pour d´eterminer ce polynˆome il faut connaˆıtre sa valeur en 2n − 1 points. Donc pour calculer le produit ‘par points’ il faut connaˆıtre 2n − 1 points des polynˆomes `a multiplier.

Dans la repr´esentation par coefficients, le calcul des coefficients du polynˆome produit est li´e `a l’op´eration de convolution. Si (a0, . . . , an−1) et (b0, . . . , bn−1) sont les coeffi-cients de deux polynˆomes de degr´e au plus n − 1 alors les coefficients du polynˆome produit de degr´e au plus 2n − 2 sont :

ck= Σ{ai· bj | i + j = k, 0 ≤ i, j ≤ (n − 1)} k = 0, . . . , 2n − 2 . (16.4) Ce calcul est O(n2).

Dans le document Notes de programmation (C) et d'algorithmique (Page 114-120)