0% ont trouvé ce document utile (0 vote)
12 vues7 pages

TD1 Correction

Le document présente des exercices sur l'analyse de la complexité algorithmique, incluant des algorithmes pour trouver le maximum dans un tableau et des boucles imbriquées. Il discute des méthodes de calcul de complexité, telles que la méthode exacte et la méthode de majoration, et fournit des exemples de calculs de complexité pour différentes structures de boucles. Enfin, il aborde des exercices d'examen avec des analyses similaires sur la complexité des algorithmes.

Transféré par

Ons Hanafi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues7 pages

TD1 Correction

Le document présente des exercices sur l'analyse de la complexité algorithmique, incluant des algorithmes pour trouver le maximum dans un tableau et des boucles imbriquées. Il discute des méthodes de calcul de complexité, telles que la méthode exacte et la méthode de majoration, et fournit des exemples de calculs de complexité pour différentes structures de boucles. Enfin, il aborde des exercices d'examen avec des analyses similaires sur la complexité des algorithmes.

Transféré par

Ons Hanafi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Correction TD2

Exercice 1 :

1) Int max(int T[],int n){


int m=T[0];
int i;
for (i=1;i<=n-1;i++){
if(m<T[i]){m=T[i];}
}
return m;
}

2) C(n)=n-1=O(n)
3) Pour montrer que notre algorithme est optimal il faut
montrer que tout algorithme qui cherche le max de T
effectue au moins n-1 comparaison.
Soit P un algorithme qui cherche le max de T
- P doit visiter toutes les cases de T car sinon une case
non visitée peut contenir une valeur plus grande que
la valeur retournée par P
- P retourne le max de T trouvée à une position i
Pour les n-1 valeurs restantes ( !=i), elles ne sont pas
retournées comme max car elles ont dû perdre une
comparaison avec au moins une autre valeur de T.
 P a effectué au moins n-1 comparaisons
Ainsi notre algorithme est optimal
Exercice 2 :

1) La boucle for compte N itérations et pour chaque


itération on a une seule opération
=> C(N)=N=O(N)
2) Méthode exacte
i=1 1op
i=2 2op
i=3 3op

i=N Nop
=> c(N)=1+2+3+…+N=N(N+1)/2=O(N²)
Rappel : Suites arithmétiques
Soit U une suite arithmétique de raison r et de 1er terme
U0, alors on a :
- Un=Un-1 + r
- Un=U0+n*r
- U0+U1+…+Un-1=n(U0+Un-1)/2
Cas particulier :
1+2+3+...+n=n(n+1)/2
Méthode de la majoration
1er boucle for : N itérations
2ème boucle for : i itérations <=N
 C(N)<=N*N<=N²
 C(N)=O(N²)

Remarque : En général les deux méthodes ne donnent pas le


même résultat la première méthode est plus précise et n’est
applicable que si la somme à calculer est remarquable. Pour la
deuxième méthode elle est toujours facile à appliquer mais
elle n’est pas précise.

3) Le nombre d’itérations de la boucle « while » est le


nombre de multiplication successives par 2 à effectuer
pour aller de 1 à N
=> la boucle « while » compte log2(N) itérations
=> C(N)=log2(N)=O(log N)

4) Boucle for : N itérations


Boucle while : log2(N) itérations
=> C(N)=NLog2(N)=O(NlogN)

5) Méthode de la majoration :
Boucle while : log2(N) itérations
Boucle for : i itérations <=2*(N-1) (on peut majorer par
2n)
C(N)<=2(n-1)Log2(N)
=> C(N)=O(NlogN)

Méthode exacte :
i=1 => i=2 et on exécute 2 op
i=2 => i=4 et on exécute 4 op
i=4 => i=8 et on exécute 8 op
.
.
.
i=2^p<n => i=2^(p+1) et on exécute 2^(p+1) op
p+1 est le plus petit entier tel que 2^(p+1) >=n
Remarque : par définition p+1=partie entière supérieure
de n.
Ainsi C(n)=2+4+8+….+2^(p+1)
Rappel : Suites géométriques
Soit U une suite géométriques de raison q et de 1er
terme U0 alors on a :
- Un=Un-1 * q
- Un=U0*q^n
- U0+U1+….+Un-1=U0(1-q^n)/(1-q)
D’où C(n)=2*(1-2^(p+1))/(1-2)=2*(2^(p+1)-1)
<=2*(2*2^p-1) on a 2^p<n
<=2*(2n-1)
Ainsi C(n)=O(n)
Remarque on voit ici que les deux méthodes n’ont pas
donné le même résultat, la méthode de la majoration à
surclassé notre algorithme.
6) La valeur de i après la 1er boucle for est
i=1*2*2*2*…*2 n fois
=2^n
La 2ème boucle for compte 2^n itérations
C(n)=2^n=O(2^n)

7) Méthode de la majoration:
1er boucle for : n itérations
3ème boucle for : 2^k itérations <=2^n
C(n)<=n*2^n
C(N)=O(n*2^n)
Méthode exacte :
for k=1 to n do
2^k opérations
endfor
C(n)=2^1+2^2+2^3+….2^n=2*(1-2^n)/(1-2)
=> C(n)=2(2^n-1)=O(2^n)
Exercice 2 (Examen 2014)
1) La boucle while compte log3(n) itérations et
pour chaque itération on a deux opérations
C(n)=2*log3(n)=O(logn)
2) 1er boucle for : n itérations
2ème boucle for : n²-i+1 <=n²+1 itérations
=> c(n)<=n*(n²+1)
C(n)=O(n^3)
3 ) 1er boucle for : n itérations
2ème boucle for : i²<=n² itérations
3ème boucle for : j<=i²<=n² itérations
=> C(n)<=n*n²*n²<=n^5 =>C(n)=O(n^5)

Exercice 1 (Examen 2014)

1) La fonction permet de remplacer les slashs consécutifs


par un simple slash
2) C’est la chaine composée par n slash
3) Boucle while O(n)
Boucle for O(n)
Les deux boucles sont imbriquées
 C(n)=O(n*n)=O(n^2)

Vous aimerez peut-être aussi