Vous êtes sur la page 1sur 2

Université Tunis El Manar

Institut Supérieur d’Informatique

Matière : Algorithmique et Structures de données et complexité


Niveau : L1 IRS

TD 5 : Complexité (suite)

Exercice 1
Ecrire une fonction récursive qui réalise la recherche d’un élément dans un tableau d’entiers
T. Etudier le cas où T n’est pas trié et où T est trié. Estimer la complexité dans chacun des
cas.

//Cas du tableau non trié


//subdivision du tableau en deux parties
Fonction rechercheRec (T :tab, d, f : entier, val :entier)
Var m :entier
Début
Si(d>f) retourner(faux) ;
sinon
m=(d+f)/2
si (T[m]=val) alors retourner (vrai) ; finsi

si (non rechercheRec(T, d, m-1, val)) alors


retourner(rechercheRec (T, m+1, f, val) );
finsi
finsi

Fin

Au pire du cas, on effectue n appels récursifs, à chaque appel on effectue une


comparaison, d’où la complexité O(n).

Exercice 2
Ecrire une fonction récursive permettant de calculer Xn et estimer sa complexité en nombre de
multiplications.

Fonction Puissance(X, n)
Var res=1 ;
Début
Si n=0 retourner(1) ;
Sinon
Retourner(X* Puissance (X, n-1)
Fin pour T(n) = aT(n-1)+f(n)
Fin  n
f (i ) 
T ( n ) = a n  T ( 0) + ∑ i 
Relation de récurrence  i =1 a 
T(n)=T(n-1)+1 T(n)=O(n)
1
Université Tunis El Manar
Institut Supérieur d’Informatique

Exercice 4
Etant donné un tableau T composé de N éléments entiers. On voudrait déterminer son
maximum par un algorithme récursif basé sur le paradigme « diviser pour régner » :
1. En considérant que le maximum est le plus grand entre le dernier terme et le maximum
des (n-1) premiers termes. Estimer sa complexité.
2. En considérant que le maximum est le plus grand entre les maximums des deux moitiés
du tableau. Estimer sa complexité.

Maximum(T :tableau[1..100], n :entier) : entier


Début
max=Maximum(t, n-1) ;
Si(max<T[N]) alors
Retourner(T[N])
Finsi
Retourner(max)
Fin

T(n)=T(n-1)+1 =>T(n)=O(n)

Maximum_2(T :tableau[1..100], d, f :entier) : entier


Début
Si(d=f) alors
Retourner(T[d]) ;
finsi
m=(d+f) div 2 ;
max1=Maximum_2(T, d, m) ;
max2=Maximum_2(T, m+1, f) ;

Si(max1<max2) alors
Retourner(max2)
Sinon
Retourner(max1)
finsi
Fin
Si a > bk alors T(n) = O(nlogb(a) ) (cas 1)
Si a = bk alors T(n) = O(nk ×logb(n)) (cas 2)
Si a < bk alors T(n) = O(nk) (cas 3)
T(n)=2T(n/2)+1


a=2, b=2, f(n)=1 et = (cas 1) =>T(n)=O(n)

Vous aimerez peut-être aussi