Corrigé Série 1
Corrigé Série 1
Corrigé Série 1
Corrigé des
Travaux Dirigés
Programmation Avancée
Master 1 en Informatique
Options BN: RS & SIA
1
Solution de la série 1
Exercice 1
Var i, 𝑗, 𝑘: entier;
𝐶[𝑖, 𝑗] ← 0; 𝒏∗𝒎 c3
Fin pour
Fin pour
Fin pour
Fin
Par exemple : la 2ème instruction est exécutée m+1 pour chaque i allant de 1 à n donc
𝑛2 = ∑𝑛𝑖=1 ∑𝑚+1 𝑛
𝑗=1 1 = ∑𝑖=1(𝑚 + 1) = 𝑛 ∗ (𝑚 + 1)
2
T(n) = A*n*m*p + B*n*m+ C*n + D.
En effet,
=( c5+c4)*n3 +(c4+c3+c2)*n2+(c2+c1)*n+c1
Sinon T(k) <= A*k3 + B*k2+ C*k+D = O(k3) avec k = max(n, m, p).
3
Exercice 2
Var : i, j : entier ;
Som : real ;
Début
𝑆𝑜𝑚 ← 0; c1 1
𝒏+𝟏
𝑆𝑜𝑚 ← 𝑆𝑜𝑚 + 𝑀𝐴𝑇[𝑖, 𝑗]; 𝑐4 ∑𝒏𝟏 𝒊 = 𝒏
𝟐
Fin pour
Fin pour
Retourner Som ; c5 1
Fin
𝒏+𝟏
D’où en nombre d’additions T(n) = 𝒏 𝟐
4
Exercice 3
Il serait absurde d’invoquer une fonction qui calcule la puissance de x pour le calcul de
chaque terme de l’expression de som. Ainsi, il suffit d’utiliser la relation de récurrence
suivante xi = xi-1*x.
𝑆𝑜𝑚 ← 1;
𝑦 ← 𝑥;
Pour i allant de 1 a n faire
𝑆𝑜𝑚 ← 𝑆𝑜𝑚 + 𝑖 ∗ 𝑦;
𝑦 ←𝑦∗𝑥;
Fin pour
Retourner 𝑆𝑜𝑚
Fin.
5
Exercice 4
Il serait absurde de calculer K! puis M! pour calculer K !/M!. En effet, il est toujours
possible d’effectuer une simplification.
Ainsi
N! N * ( N − 1) * ( N − 2) * ... * (N − P + 1) * (N − P ) * ... * 2
C NP = = =
P!*(N − P )! P!*(N − P )!
N * ( N − 1) * ( N − 2) * ... * (N − P + 1)
P!
Nous avons alors simplifié par le facteur (N − P )! ; cela nous fait gagner 2*(N-P-1)
multiplications. Ce qui n’est pas négligeable.
6
• Il y a une multiplication dans la 3ème instruction qui se répète
N-(N-P+2)+1=P-1 fois et une division (qui a le même coût que la
multiplication) dans la 5ème instruction qui se répète P-1 (le coût de calcul de P!)
et une division.
D’où le nombre de multiplications et divisions nécessaires est
• L’ordre de grandeur de cette fonction est O(P), sa complexité est donc linéaire.
7
Exercice 5
Algorithme max ;
Var A : tableau[1..100], n, max, i : entier;
Début
𝑚𝑎𝑥 ← 𝐴[1];
Pour i allant de 2 a n faire
Si 𝐴[𝑖] > max alors
𝑚𝑎𝑥 ← 𝐴[𝑖];
Fin si
Fin pour
Ecrire 𝑚𝑎𝑥;
Fin.
3. L’algorithme est optimal, car tout élément excepté le max doit avoir perdu une
comparaison, sinon on ne peut pas savoir qu’il n’est pas le max. Ce qui donne lieu à
n-1 comparaisons.
Conclusion. Tout algorithme de recherche du min ou max doit effectuer au moins n-1
comparaisons.
8
Exercice 6
Algorithme max2
Début
𝑚𝑎𝑥1 ← 𝐴[1];
1 comparaison
𝑚𝑎𝑥2 ← 𝐴[2];
Sinon
𝑚𝑎𝑥2 ← 𝐴[1];
𝑚𝑎𝑥1 ← 𝐴[2];
Fin si
𝑚𝑎𝑥2 ← 𝑚𝑎𝑥1;
𝑚𝑎𝑥1 ← 𝐴[𝑖];
Sinon
2(n-2) comparaisons dans le pire
Si (𝐴[𝑖] ≥ 𝑚𝑎𝑥2) alors cas
𝑚𝑎𝑥2 ← 𝐴[𝑖];
Fin si
Fin si
Fin pour
Fin
9
2. La complexité de l’algorithme max2 en nombre de comparaisons
T(n)= 1+2(n-2) = 2n-3 comparaisons.
13 5 28 17 30 25 19 14
Niveau 3
13 28 30 19
Niveau 2
28 300
Niveau 1
Niveau 0 30
10
Ce qui conduit à T(n) = n-1 comparaisons.
Le 2ème plus grand n’est plus petit que devant le plus grand élément. Il n’a donc perdu que
dans une comparaison qui est celle avec le plus grand élément.
Illustration: pour trouver le max 2 on cherche d’abord le max 1 par la méthode du tournoi (le
max est alors l’élément 30), ensuite pour trouver le max 2, on cherche le plus grand parmi les
éléments battus par le max 1 (25, 19 et 28) par la méthode du tournoi.
13 5 28 17 30 25 19 14
Niveau 3
13 28 30 19
Niveau 2
28 30
Niveau 1
Niveau 0 30
25 19 28
25 28
28
11
Le max 2 est alors 28.
PS. En théorie des graphes, dans le pire cas m = la hauteur de l’arbre -1. Par ailleurs, un
arbre parfait à n feuilles est de hauteur ⌈log 2 (𝑛)⌉. D’où T(n) = n + ⌈𝑙𝑜𝑔2 (𝑛)⌉ - 2
12
Exercice 7
Algorithme Max-Min
Début
Lire (n) ;
𝑚𝑎𝑥 ← 𝐴[1];
𝑚𝑖𝑛 ← 𝐴[1];
𝑚𝑎𝑥 ← 𝐴[𝑖];
Sinon
𝑚𝑖𝑛 ← 𝑇[𝑖];
Fin si
Fin si
Fin pour
Fin.
13
3. Un algorithme plus efficace.
Principe.
1. On compare par paires les éléments de l’ensemble. On met d’un côté les plus grands
éléments (par exemple dans les cases paires du tableau) et de l’autre les plus petits.
2. On recherche le minimum parmi tous les plus petits éléments.
3. On recherche le maximum parmi tous les plus grands éléments.
Algorithme Max-Min-Efficace ;
Var A : tableau [1..100] ; n, n1, i, max, min, x : entier;
Début
Lire (n) ; n1← 𝑛 − 1 ;
Pour i allant de 1 à n1 à pas 2 faire
Si A[i] > A[i+1] alors
𝑥 ← 𝐴[i];
𝑛
A[i] ← 𝐴[i + 1]; ⌊2 ⌋ Comparaisons
𝐴[i + 1] ← x;
Fin si
Fin pour
min ← 𝐴[1];
Pour i allant de 3 à n à pas 2 faire
Si A[i] < min alors 𝑛
⌈ 2⌉ − 1 Comparaisons
min ← 𝐴[i];
Fin si
Fin pour
max ← A[2];
Pour i allant de 4 à n à pas 2 faire
Si 𝐴[i] > max alors 𝑛
⌊2 ⌋ − 1 Comparaisons
max ← A[i];
Fin si
Fin pour
Si n mod 2 <> 0 alors
Si 𝑨[n] > max alors 1 Comparaison significative
max ← A[𝑛];
Fin si
Fin si
Fin.
14
4. La complexité de l’algorithme efficace en nombre de comparaisons
𝑛 𝑛 𝑛 𝑛
T(n)= ⌊2 ⌋ + ⌈ 2 ⌉ − 1 + ⌊2 ⌋ − 1 +1 =𝑛 + ⌊2 ⌋ − 1 comparaisons
PS. On a négligé la comparaison dans n mod 2 < > 0, qui est instantanée.
Exercice 8
LLC non LLC triée LDC non LDC triée Tableau Tableau
triée triée non trié trié
Recherche (L,x) O(n) O(n) O(n) O(n) O(1) O (1)
15