Notion de complexit´e 3
II Notion de complexit´e
Un algorithme est une proc´edure effective d´ecrite au moyen d’une s´equence finie d’´etapes de calculs qui vont
transformer les donn´ees en r´esultats. L’efficacit´e ou la performance d’un algorithme d´epend de sa capacit´e `a
minimiser certains crit`eres tr`es importants comme :
•le temps d’ex´ecution qui va d´ependre du nombre d’op´erations `a affectuer
•les ressources mat´erielles n´ecessaires notamment l’espace m´emoire utilis´e
On d´enombre le plus souvent un seul type d’op´eration (en g´en´eral la plus coˆuteuse) : il est bon de pr´eciser
“complexit´e en nombre de comparaisons”(ce sera le cas des algorithmes de tri), “complexit´e en nombre de
multiplications” (pour des algorithmes de calculs comme la multiplication de polynˆomes), . . .
Pour comparer des algorithmes s’appliquant `a un certain type de donn´ees, de taille variable, on d´efinit
une taille de donn´ees N(par exemple : taille d’un tableau, degr´e d’un polynˆome, ordre d’une matrice carr´ee,
longueur d’une liste, . . . ).
Si C(d) d´esigne la complexit´e de l’algorithme ´etudi´e pour le traitement de la donn´ee d, ´el´ement de l’ensemble
D(N) des donn´ees de taille N, on d´efinit :
•la complexit´e dans le pire des cas : Tau pire (N) = max {C(d), d ∈ D (N)};
•la complexit´e dans le meilleur des cas : Tau mieux (N) = min {C(d), d ∈ D (N)};
•la complexit´e en moyenne :
Tmoyen (N) = 1
Card D(N)·X
d∈D(N)
C(d)
(en supposant D(N) fini et les diff´erentes donn´ees ”´equiprobables” !).
La complexit´e dans le pire des cas informe sur le temps maximal de calcul qu’effectue un algorithme.
La complexit´e dans les meilleurs des cas informe sur le temps minimum de calcul qu’effectue un l’algorithme.
C’est par exemple le temps mis par certains algorithmes de tris d’une liste d´ej`a class´ee.
La complexit´e en moyenne renseigne sur le comportement g´en´eral de l’algorithme, mais il n’est pas tr`es facile
de le calculer en g´en´eral. Elle se calcule essentiellement par des techniques issues du calcul probabiliste.
La complexit´e dans le pire des cas est la plus souvent calcul´ee. Cela permet d’´evaluer les algorithmes dans
leur fonctionnement extrˆeme. Pas de mauvaise surprise `a pr´evoir.
Notation Θ (f(N))
Tet f´etant deux fonctions de IN dans IR+,on ´ecrit T(N) = Θ (f(N)) si et seulement si l’on a simultan´ement
T(N) = O(f(N)) et f(N) = O(T(N)) lorsque Ntend vers l’infini, autrement dit s’il existe αet βpositifs
tels que, pour Nassez grand, on ait : αf (N)≤T(N)≤βf (N)(i.e. T(N)et f(N)sont asymptotiquement
du mˆeme “ordre de grandeur”).
La hi´erarchie des ordres de grandeur permet effectivement une comparaison des algorithmes ind´ependamment
de la machine utilis´ee, car les temps de calcul T1(N) et T2(N) sur deux machines de performances diff´erentes
sont grosso modo des fonctions proportionnelles de N(le facteur de proportionnalit´e mesurant la diff´erence de
rapidit´e des deux machines).
On parle de complexit´e :
•logarithmique pour Θ(log2(n))
•lin´eaire pour Θ(n)
•quasi-lin´eaire pour Θ(nlog2(n))
•polynˆomiale pour Θ(nk) avec k > 1
•exponentielle pour Θ(an) avec a > 1
Exemples de temps d’ex´ecution
Le tableau ci-dessous donne des valeurs approch´ees du temps de calcul n´ecessaire `a une machine, capable
d’ex´ecuter 108op´erations par seconde, pour mettre en œuvre des algorithmes de complexit´es vari´ees (les unit´es
j, a, u d´esignant respectivement le jour, l’ann´ee et l’ˆage estim´e de l’univers).