Vous êtes sur la page 1sur 3

Université Moulay Ismail

Faculté des Sciences Janvier


2020
Département d’Informatique SMI3

Epreuve d’Algorithmique II
Durée : 1h 30
Exercice 1 (1+2+1+3)
Un entier n étant donné, on considère la suite uni définie par son premier terme u0 =
n
+u
ui−1 i−1
ui =
1 et, pour i > 0, par la relation de récurrence 2
n
1.1 pour n = 2, calculer ui pour i= 2,3,4 et 5
n
1.2 écrire un fonction recursive (en c) efficace retournant ui .
1.3 a quoi peut servir ce calcul ?
1.4 réecrire cette fonction sous forme itérative.
Exercice 2: (1+2+2+1)
Soit la fonction f suivante : entier f(entier n)
si n=0 alors retourner 2
retourner f(n-1)*f(n-1)
2.1 que calcule cette fonction
2.2 combien de multiplications doit on faire pour calculer f(n)
2.3 réécrire f(n) d’une façon efficace i.e . en effectuant un minimum de multiplications
2.4 quelle est la nouvelle complexité de f(n) en termes de nombre de multiplications.
Exercice 3: (3+3+1)
On rappelle les principaux algorithmes (vus en cours) servant à construire un tas :
droit(i) construireTasMax(A)
retourner 2*i+1 taille[ A]←longueur[A]
gauche(i) pour i ← longueur[A]/2
retourner 2*i jusqu'à 1 par pas de −1
faire
pere(i) entasserMax(A,i)
retourner i/2
augumenterClé(A,i,clé)
entasserMax(A,i) si clé < A[i] alors
l←gauche(i) erreur
r←droit(i) A[i]←clé
si l≤taille[A]et A[l]> A[i] tant que i>1 et A[père[i]]< A[i]
alors max←l faire
sinon max←i echanger(A[i],A[père[i]])
si r≤taille[A]et A[r]> A[max] i←père [i]
alors max←r
si max≠i alors insérerTasMAx(A,clé )
echanger(A[i],A[max]) taille [A]←taille[A]+1
entasserMax(A,max) A[taille[A]]←−∞
augumenterClé(A,taille[A],clé)
Université Moulay Ismail
Faculté des Sciences Janvier
2020
Département d’Informatique SMI3

3.1. En utilisant construireTasMax() transformer le tableau suivant en un tas max en


listant les appels à la procédure echanger()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 7 3 12 10 30 22 14 6 8 11 18 8 9 15

3.2. En utilisant la tableau original de la question 3.1. utiliser l’algorithme suivant


pour construire le tas en précisant les appels à la procédure echanger()
construireTasMax’(A)
taille[ A]←1
pour i ← 2 à longueur[A] faire insérerTasMAx(A,A[i])
3.3. Comparer les deux méthodes
1.1 U0= 1 U1=1,5 U2=1,416 U3=1,414 U4=1,414 U5=1,414

1.2.
float u(int i,int n) {
float x;
if (i==0) return 1;
x=u(i-1,n);
return (n/x + x)/2;
}

1.3.racine carrée

1.4.
float u1(int i,int n) {
float x=1,y;
int j;
for (j=1;j<=i;j++){
y=(n/x + x)/2;
x=y;
}
return y;
}

2.1
int f1(int n){
if (n==0) return 2;
return f1(n-1)*f1(n-1);
}
n
2
2
n
2.2 . 2 multiplications

2.3.
int f2(int n){
int i,x=2;
for(i=n;i>0;i--)
x=x*x;
return x;
}

2.4. n multiplications
Université Moulay Ismail
Faculté des Sciences Janvier
2020
Département d’Informatique SMI3

3.1 construireTasMax 2 7 3 12 10 30 22 14 6 8 11 18 8 9 15
ech(A[5],A[11])
ech(A[4],A[8])
ech(A[3],A[6])
ech(A[6],A[12])
ech(A[2],A[4])
ech(A[4],A[8])
ech(A[1],A[3])
ech(A[3],A[7])
ech(A[7],A[15])
30 14 22 12 11 18 15 7 6 8 10 3 8 9 2

3.2 construireTasMaxPrime

3.3

Vous aimerez peut-être aussi