Académique Documents
Professionnel Documents
Culture Documents
1 S. Boukhedouma
4. Ecrire une procédure Ordre qui réordonne les lignes de la matrice A par ordre
croissant du nombre d’occurrences de val dans les lignes (la première ligne sera celle
qui contient le plus petit nombre d’occurrences de val). 10mn 2 pts
4.1 Prouver la validité de la procédure Ordre
4.2 calculer la complexité de la procédure Ordre ? (avec explication).
Validité
Terminaison de l’algorithme
n >0 par hypothèse;
i=1 par initialisation et est incrémenté de 1 à chaque tour de boucle ; donc i atteindra la
valeur d’arrêt n-1 après (n-1) itérations;
j=i+1 par initialisation et est incrémenté de 1 à chaque tour de boucle ; donc j atteindra la
valeur d’arrêt n après (n-i) itérations;
Aussi le corps de la boucle ne contient que des comparaisons, affectations et
éventuellement des permutations de lignes opérations finies
l’algorithme se termine
C(m) = 1+ C(m-1) = 1+1+ C(m-2) = … =1+1+ … +C(m-k) = 1+1+ …+ C(1)= 1+ …+1 (m fois) = m
C(m) = O(m) linéaire
Exercice 2 6 pts
On considère un problème PB défini comme suit :
Soit E un ensemble fini de valeurs dans N et soit t ∈ N une valeur donnée. On cherche
à savoir s’il existe un sous-ensemble E1 inclus (ou égal) dans E dont les éléments ont
pour somme la valeur t.
3 S. Boukhedouma
Par exemple E = {25, 6, 17, 64, 256, 105, 1041, 2056, 3200, 67} et t = 2231 alors
E1 = {6, 64, 105, 2056} est une solution.
1. Etant donnés deux ensembles E, E1 (E1 inclus dans E) et une valeur t, écrire
l’algorithme qui vérifie si la somme des éléments de E1 est égale à t. Donnez la
complexité de l’algorithme.
Complexité
La boucle pour se répète n fois, selon le nombre d’éléments de l’ensemble E1
sachant que n est le cardinal de E1. Complexité linéaire en O(n)
∑ n!/(k!*(n-k)!)
i=1
Ce qui donne un nombre exponentiel de sous-ensembles E1 construits à partir de E
Exercice 3 (4pts)
S1= ∑ = (∑ i)2 = S2
i3 pour tout n >=1
i=1 i=1
S1= ∑ i3 = ∑ i3 + (n+1)3
i=1 i=1
i=n+1
5 S. Boukhedouma
= ((n+1)(n+2)/2)2 = ((n(n+1)/2 + 2*(n+1)/2)2= ((n(n+1)/2+ (n+1))2
= (n(n+1)/2)2 + (n+1)2 + 2*n (n+1)(n+1)/2
// la partie en noir c’est l’hypothèse de récurrence, on calcule la partie en bleu (n+1)2 +
2*n (n+1)(n+1)/2 pour vérifier si elle est égale à (n+1)3
(n+1)2 + 2*n (n+1)(n+1)/2 = (n+1)2 + n (n+1) 2 = (n+1)2 (1+n) = (n+1)3 //cqfd
Donc S1 = S2.
2) Résoudre l’équation de récurrence suivante : // fait en TD
T(1)=1,
T(n) = 2n+1+ 2*T(n/2) si n>1
Il faut trouver C1 et C2 et n0 tels que C1*n3 <= 2n3+n2 log n <= C2*n3
(n>=n0)
C1*n3 <= 2n3+n2 log n <= C2*n3
C1 <= 2+ logn/n <= C2
6 S. Boukhedouma