Book Uml
Book Uml
Book Uml
dz
Complexité en temps
Soit l’algorithme suivant qui permet de chercher l’existence d’un élément x dans un tableau tab
instructions, après on a deux comparaisons i<10 et b==0 plus une opération logique le « et »
Page
logique représenté par l’opérateur &&, donc on a 3 instructions. Dans le corps de la boucle on a
Université Badji Mokhtar , Annaba, Département d’Informatique, L2, ALGO-STD-2, sabri.ghazi@univ-annaba.dz
l’accès à un élément dans le tableau, une comparaison et une affectation plus l’incrémentation du i
et son affectation, ceci fait 5 instructions, à la fin nous avons le retour qui peut être vu comme étant
une opération d’affectation, donc on a une dernière instruction. Si on suppose que notre algorithme
reçoit un tableau de n cellules donc la boucle sera exécutée au maximum n fois. De ce fait, on peut
résumer le nombre d’instruction qu’exécute notre algorithme par une fonction mathématique qui
dépende de n la taille du tableau, et on aura f(n) = 2+ 8 n +1 = 8 n+ 3.
D’après notre analyse on a pu approximativement compter le nombre d’instruction que fait notre
algorithme, cette approximation reste encore dépendante du contenu de tableau T, en fait, la façon
avec laquelle ce dernier est remplis peut affecter le nombre d’instructions exécutées par notre
algorithme. Imaginez les cas suivants :
L’élément X qu’on cherche figure dans la première cellule du tableau Tab,
L’élément X se trouve au milieu du tableau.
L’élément X figure dans la dernière cellule ou bien n’existe pas dans le tableau.
En analysant ensemble ces trois cas, le cas A signifié que notre algorithme exécutera le corps de la
boucle uniquement une fois seulement, est ceci quel que soit la taille du table n. Quand on calcule la
complexité en temps, ce cas est appelé le meilleur cas (the best case, en anglais). Le deuxième cas
B est nommé le cas moyen, le dernier cas C est appelé le pire des cas (worst case en Anglais).
Il est important de garder en tête que la complexité en temps d’un algorithme dépend de la taille et
la distribution des données reçus en entrée.
La notation asymptotique
Lorsqu’on calcule la complexité d’un algorithme, le plus intéressant pour nous c’est le pire des cas,
c’est à dire le scénario durant lequel notre algorithme recevra les données qui montreront ses pires
performances. On compare après les algorithmes selon ce cas.
Une fois qu’on a la fonction qui permet d’approximer le nombre d’instruction (le comportement) de
notre algorithme, le but est de voir l’évolution de ce nombre lorsqu’on tend n vers l’infinie,
mathématiquement parlant, on cherche a trouvé la limite de la fonction lorsque n tend vers l’infinie.
Dans notre exemple f(n) = 8 n+3, imaginez que n = 1000, f(n) = 8* 1000 +3=8003, ici on peut
ignorer la constante 3, de même on peut aussi ignorer les facteurs on dit que le comportement
asymptotique de F(n)= 8 n +3 et f(n)= n, car lorsque n tend ver l’infinie, F(n) tend aussi vers
l’infinie donc on écrit f(n)=n, c’est ce terme qui « domine » la fonction.
De la même façon on peut examiner les fonctions suivantes :
f(n)= 5 n + 12 donnera f(n)= n
f(n) = 200 donnera f(n) =1 , ici on remplace 200 par 1 pour dire que la fonction n’est pas nulle mais
elle est constante.
f(n) = n2+3 n + 100 , ce qui donnera f(n) = n2, ici n2 croit plus vite que 3 n , donc on ignore 3 n et
aussi la constante 100.
f(n) = n + √𝑛, ici f(n) = n, vu que elle croît plus vite que la racine carrée de n, donc c’est ce terme
15
qui domine.
Page
Université Badji Mokhtar , Annaba, Département d’Informatique, L2, ALGO-STD-2, sabri.ghazi@univ-annaba.dz
L’algorithme décrit dans la figure 1, suit une stratégie nommée recherche linéaire (linear search en
Anglais). Comme on peut remarquer sa fonction qui approxime son nombre d’instructions est aussi
une fonction linéaire.
La notation thêta Θ
Une fois qu’on a pu avoir la fonction qui calcule le nombre d’instruction on peut après suivre la
notation est dire que notre algorithme est Θ(f(n)). Dans notre cas , l’algorithme décrit dans la figure
1 on dit qu’il est Θ(n), d’autres exemples :
5n + 12 ∈ Θ( 5n )
6n + 10n ∈ Θ( 10n )
Complexité :
Une fois qu’on a pu déduire la fonction asymptomatique la fonction qui approxime le nombre
d’instructions que fait un algorithme. On peut dorénavant déduire sa complexité. Simplement, un
programme qui ne possède aucune boucle aura la fonction f(n)=1, un programme avec une boucle
aura f(n)=n, un programme avec deux boucles imbriquées, aura f(n)=n2, de même trois boucles
imbriquées est à f(n)=n3.
Questions : Que pensez-vous d’un algorithme qui possède
Deux boucles qui ne sont pas imbriquées,
Ou bien un autre avec 3 boucles, deux imbriquées et l’autre indépendante ?
De même si on a un algorithme avec trois boucles consécutives, laquelle sera elle considérée pour
estimer son comportement asymptotique ?
Le cas d’un algorithme qui dans une boucle appel une fonction et cette dernière est implémentée à
l’aide d’une boucle, que faire dans ce cas ?
Réponses : En cours
La complexité dans ce cas est inférieur a une fonction linéaire. f(n+1)=f(n)+£. Cette fonction est
Page
moins rapide qu’une fonction linéaire. On note la complexité logarithmique par O(log (n)).
Université Badji Mokhtar , Annaba, Département d’Informatique, L2, ALGO-STD-2, sabri.ghazi@univ-annaba.dz
f( n ) = 3n + 2n | 3. f( n ) = nn + n | 4. f ( n) = n+ √𝑛
Exercice 2
Soit deux tableaux T1 et T2 , de différentes tailles, contenants des entiers:
Ecrire un algorithme qui calcule la somme des éléments d’un tableau. Compter son nombre
d’instructions et déterminer sa complexité.
Ecrire un algorithme qui mit dans un troisième tableau T3 les éléments pairs de T1 et T2.
Déterminer le nombre d’instructions et sa complexité.
Ecrire un algorithme qui calcule l’intersection entre T1 et T2, compter le nombre
d’instructions et déterminer la complexité.
Exercice 3
Soit l’algorithme suivant
18
Page