UQAC Jeudi 29 Janvier 2004.
Structures de donn´ees et algorithmes 8SIF101
S´ erie 3: analyse des algorithmes
Exo.1: Montrer que pour toute constante r´eelle a et b, b>0, nous avons (n+a)b =O(nb)
Cette relation est-elle vraie pour les notations Θ et Ω?
Exo.2: Montrer que pour toute constante r´eelleai et entierxpositif, nous avons
n
X
i=0
aixi =O(xn)
Exo.3: Trouver l’odre des fonctions suivantes:
1. n2+ 2n; logn2 2. log 3n;n+ 1/n 3. n+ logn
Exo.4: Parmi les relations suivantes, quelles sont celles qui sont correctes.
1. O(1) =O(10);O(1) = 10;αn+1=O(αn), α´etant une constante
2. (n+ 1)! =O(n!),2n=O(n!), n! =O(2n); lognn=O(logn!);nn=O(n!)
Exo.5: Quelle la valeur dek`a la sortie de la boucle de la portion de programme ci-dessous:
k = 1;
while (k<= n) k = k * 2;
En d´eduire la complexit´e temporelle de ce programme.
Exo.6: Calculer les complexit´es temporelles en fonction de la variablendes portions de programmes ci-dessous.
Program 1:
d = 1;
while (d*d<= n) d = d * 2;
Program 2:
d = 1;
while (d*d<= n) d = d * 2 + 1;
Program 3:
for (i=0; i<n; i++) for (j=0; j<n; j++)
s = s + 1;
Program 4:
d = 1;
while (d*d<= n){
j = 1;
while (j<= n) d = d * 2;
d = 2*d + 1;
}
Exo.7: D’un point de vue du nombre d’op´erations, quelle est la diff´erence entre les deux portions de programmes suivants:
version1: version2:
som = 0; som = 0; t = n-1;
for(i=1; i<n-1; i++) for(i=1; i<t; i++)
som = som +1; som = som + 1;
Exo. 8: ´Evaluer d’un point de vue du nombre d’acc´es au tableau A les deux portions de programmes ci-dessous.
version1: version2:
aux = A[1];
for(i=1; i<n-1; i++) for(i=1; i<t; i++)
som = A[1] + A[i]; som = aux + A[i];
Exo.9: Que font les fonctions r´ecursives suivantes:
1. long mystere1( int n){
if (n == 0) return 0;
return (mystere1(n-1) + n*n);
}
2. double mystere2(double b, int n){
if (n == 0) return 1;
return (1+ b*mystere1(b,n-1));
}
2
3. bool mystere3(string s, int gauche, int droit){
if (right<= left) // la base return true;
else if (s[gauche] != s[droit]) // base return false;
else
return mystere3(s, gauche + 1, droit - 1);
}
4. bool mystere4(double a[], int n){
if (n == 1) return a[0];
int n1 = n/2;
int n2 = n - n1;
double m1 = mystere4(a,n1);
double m2 = mystere(a+n1,n2);
return (m1>m2 ? m1: m2);
}
Exo.10: D´eterminer pour chacune de ces fonctions r´ecursives leur complexit´e temporelle. Ensuite, d´eterminer pour chacune d’elle la taille de la pile g´en´er´ee.
3