TD 4-5-6 : Suites récurrentes et complexité

publicité
Licence Informatique L3
Parcours : Informatique fondamentale
année 2008-2009
TD 4-5-6 : Suites récurrentes et complexité
3 types d’exercice : les exercices * sont absolument à faire en TD, ils peuvent être complétés par les exercices
sans mention. Les exercices (maison) peuvent être faits sans problème dès lors que les autres ont été compris.
Exercice 1* : Soit Σ = {a1 ,..., a k } un alphabet à k éléments.
On rappelle que les arbres binaires BIN étiquetés par Σ sont définis inductivement par :
- φ est un arbre binaire
- si x ∈ Σ, bg ∈ BIN , bd ∈ BIN , alors ( x, bg , bd ) ∈ BIN .
Définition : La profondeur p(b) d’un arbre binaire est définie par :
- p(φ ) = 0
- p (( x, bg , bd ) ) = 1 + sup{p(bg ), p(bd )}
Etablir une formule de récurrence pour :
1) le nombre un d’arbres binaires Un de profondeur ≤ n (en fonction de un-1).
2) le nombre vn d’arbres binaires ABn de profondeur = n
(en fonction de vn-1 et des (ui) i ≤ n).
NB : On ne demande pas de calculer un et vn.
Exercice 2 : On considère l’alphabet A = {a, s, b, t} où a (resp. s, b, t) est d’arité 0 (resp. 1,2,3).
L’ensemble T des arbres étiquetés sur l’alphabet A est défini inductivement par :
a) a ∈ T (arbre réduit à une feuille)
b) t1 , t 2 , t 3 ∈ T alors : - ( s, t1 ) ∈ T
- (b, t1 , t 2 ) ∈ T
- (t , t1 , t 2 , t 3 ) ∈ T
La profondeur d’un tel arbre se définit inductivement par :
a) p(a) = 1
b) - p (( s, t1 ) ) = 1 + p (t1 )
- p ((b, t1 , t 2 ) ) = 1 + sup{ p (t1 ), p (t 2 )}
- p ((t , t1 , t 2 , t 3 ) ) = 1 + sup{ p (t1 ), p (t 2 ), p (t 3 )}
Soit kn le nombre d’arbres de profondeur n.
1) Donner des exemples d’arbres de profondeur 1,2 et 3. Calculer k1, k2 et k3.
2) En déduire une relation de récurrence pour kn.
NB : On ne demande pas de calculer kn.
1
Exercice 3* : On trace n cercles qui se coupent 2 à 2 sans points tangents ni points triples.
Soit rn le nombre de régions du plan ainsi définies.
1) Calculer r1 , r2 et r3 .
2) En déduire rn = rn −1 + 2(n − 1) , n > 1.
3) Calculer rn .
Exercice 4* : Algorithme pour le calcul du produit de deux matrices de taille NxN, avec
N=2n.
(méthode de Strassen)
1- Comprendre les calculs suivants dans le cas N=2
⎛ a b ⎞ ⎛ e f ⎞ ⎛ ae + bg af + bh ⎞
⎟⎟ x⎜⎜
⎟⎟ = ⎜⎜
⎟⎟
Si ⎜⎜
⎝ c d ⎠ ⎝ g h ⎠ ⎝ ce + dg cf + dh ⎠
on peut poser :
x1 = (b − d )( g + h)
x 2 = (a + d )(e + h)
x3 = (a − c)(e + f )
x 4 = ( a + b) h
,
x5 = a ( f − h)
x 6 = d ( g − e)
x 7 = (c + d )e
⎛ x + x 2 − x 4 + x6
le produit des deux matrices s’écrit alors ⎜⎜ 1
x6 + x7
⎝
⎞
⎟
x 2 − x3 + x5 − x 7 ⎟⎠
x 4 + x5
2- Soit N=2n, A et B deux matrices NxN
On pose :
A12 ⎞
⎛A
⎟⎟ , idem pour B. On peut alors faire le produit de deux matrices
A = ⎜⎜ 11
⎝ A21 A 22 ⎠
de manière récursive à partir des cinq fonctions de base :
Découper_en_4(A), algorithme qui fournit à partir d’une matrice A de taille NxN, les 4
matrices A11, A12, A21, A22 de taille N/2 x N/2
Recompose (A11,A12, A21,A22), algorithme qui recompose une matrice NxN à partir de 4
matrices N/2 x N/2
AddMat(A,B,N) et SubMat(A,B,N) font respectivement l’addition et la soustraction de
deux matrices NxN
ProdMat(A,B,N) fait le produit de deux matrices d’ordre NxN avec N=2n, de la manière
suivante :
2
fonction ProdMat(A,B,N)
…
début
si (N=1) alors ProdMat := A x B ;
sinon
début
Découper_en_4(A) ;
Découper_en_4(B) ;
X1 := ProdMat(SubMat(A12,A22,N/2),AddMat(B21,B22,N/2),N/2) ;
X2 := ProdMat(AddMat(A11,A22,N/2), AddMat(B11,B22,N/2),N/2) ;
…
X7 :=…
C11 :=…
C12 := AddMat(X4,X5,N/2) ;
C21 :=…
C22 :=
ProdMat := Recompose(C11,C12, C21,C22) ;
fin
finsi
fin
2.1 Compléter l’algorithme ProdMat.
2.2 Combien d’appels à ProdMat(…,N/2) et à AddMat(…,N/2) fait ProdMat(…,N) ? (On
suppose qu’un appel à AddMat(…,N/2) est équivalent à SubMat(…,N/2))
2.3 Trouver la relation de récurrence qui permet de définir le nombre de multiplications
effectuées pour calculer le produit de deux matrices NxN avec N= 2n ainsi que le nombre
d’additions.
2.4 Résoudre ces relations.
2.5 Retrouver le nombre de multiplications et additions effectuées lorsque l’algorithme utilisé
est l’algorithme classique (vu en cours).
2.6 Comparer les deux résultats
n −1
Exercice 5* : Résoudre la relation ∀n, n ≥ 1 : U n = 3∑ U k + 1 (en fonction de n et U0).
k =0
Exercice 6* : Résoudre Fibonacci : Fn + 2 = Fn +1 + Fn
pour n ≥ 0 avec F0 = 0 et F1 = 1.
(Ces nombres apparaissent dans le calcul de la complexité de l’algorithme d’Euclide : en effet
pgcd (Fn,Fn-1) correspond au pire des cas, le nombre d’appel de l’algorithme pgcd est égal
alors à n)
Exercice 7 (maison) : Trouver les solutions de U n = 3U n −1 + 4U n − 2 pour n ≥ 2 avec U0 = 0 et
U1 = 1.
Exercice 8 (maison) : Trouver les solutions de U n = 5U n −1 − 8U n − 2 + 4U n −3 pour n ≥ 3
avec U0 = 0, U1 = 1 et U2 = 2.
3
Exercice 9* : Σ = {a, b}. B ⊂ Σ + .
a ∈ B, b ∈ B
B définie par : w ∈ B ⇒ abw ∈ B .
w ∈ B ⇒ baw ∈ B
1) Ecrire 6 éléments de B.
2) Prouver que w ∈ B ⇒ |w| impair (longueur impaire).
La réciproque est-elle vraie ?
3) Un = card {w / w ∈ B et |w| = n}.
a. Calculer U1, U2, U3 et U4.
b. Donner la relation de récurrence et résoudre.
Exercice 10* : Σ = {a, b, c, d } .
{
L = w ∈ Σ * / ∃w1 , w2 ∈ Σ * avecw = w1 abw2
}
= { w ∈ Σ / w n’a pas de facteur ab}
*
∀n, n ≥ 1 , on pose Ln = L I Σ n et u n = Ln avec Σ n = {mots de longueur n sur Σ }.
1) Calculer L1, L2, u1 et u2.
2) Donner une condition nécessaire et suffisante pour que w = xw’ avec x ∈ Σ et w ∈ Ln .
3) Exprimer Ln en fonction de Ln −1 et Ln − 2 . En déduire que u n = 4u n −1 − u n − 2 .
4) Calculer un.
Exercice 11 : Soit Σ = {0,1}. On interprète un mot f de Σ * comme la représentation binaire
d’un entier. Par exemple, 101 représente 5, 1101 représente 13.
Soient Li = f ∈ 1.Σ * / i ≡ f [3] , i = 0,1,2, en d’autres termes,
Li
{
= { f ∈ 1.Σ
}
*
/ f commence par 1 et i ≡ f modulo 3
u n = L0 ∩ Σ n
Pour tout n ≥ 1, on pose :
v n = L1 ∩ Σ n
wn = L 2 ∩ Σ n
1) Calculer u1, v1, w1 et u2, v2, w2
2) Si f ∈ Li à quel ensemble appartient le mot f0 ?
A quel ensemble appartient le mot f1 ?
u n +1 = u n + v n
En déduire que : v n +1 = u n + wn .
wn +1 = wn + v n
3) Calculer u n , v n , wn avec :
a. La méthode du polynôme caractéristique.
b. La méthode matricielle.
4
} , i = 0,1,2.
Exercice 12 : Algorithme du pgcd (Recherche du plus grand commun diviseur)
Rappel de l’algorithme
Procedure pgcd (entier : a, entier : b , var c :entier)
début
si (b = 0) alors c := a ;
sinon
c := pgcd(b,a%b) ;
finsi
fin
(a%b représente le reste de la division euclidienne de a par b)
1- Soit a = n ; montrer que le nombre d’appels de la fonction pour calculer le pgcd de a et b
(b<a) est majoré par les termes de la suite An, vérifiant :
⎧ A0 = 0
⎨
⎩ An = An / 2 + 2
2- Déterminer An.
Exercice 13* : Algorithme de calcul de la nième puissance de x
Procedure Exp( x : long, n : entier, var y : long)
début
si (n = 0) alors y :=1 ;
sinon
début
Exp(x,n/2,y) ;
si (n%2 = 0) alors y := y * y ;
sinon y := y * y * x ;
finsi
fin
finsi
fin
1- Trouver la relation de récurrence qui donne le nombre de multiplications réalisées
pour calculer xn, notée E(n).
t −2
2- Après avoir écrit n en base 2, n > 0, c'est-à-dire que n = 2 t −1 + ∑ bi 2 i , t ≥ 1 , écrire
i =0
E(n) en fonction des (bi)i.
3- En déduire la complexité au pire, dans le meilleur des cas et en moyenne.
4- Comparer avec l’algorithme classique.
5
Exercice 14 (maison) : Résoudre ∀n, n ≥ 2 :
2U n = 3U n −1 − U n − 2
U n = U n −1 − 2U n − 2
1)
2)
.
U n = U n −1 − 2U n − 2 + 4
U n = 4U n −1 − 4U n − 2
Exercice 15* : Résoudre U n = U n −1 + 2U n −2 + (−1) n pour n ≥ 2 et U0 = U1 = 1.
Exercice 16* : Résoudre U n = 2U n −1 + n + 2 n pour n > 0 et U0 = 0.
Exercice 17 (maison) : Résoudre U n + 2 = 3U n +1 − 2U n + 4n pour n ≥ 0 et U0 = U1 = 0.
Exercice 18 : Résoudre la récurrence u n = 4u n + n² pour n = 2k.
2
6
Téléchargement