Académique Documents
Professionnel Documents
Culture Documents
Remarque. La complexité en temps d’un algorithme sera exprimé par une fonction, notée T (pour Time),
qui dépend :
◮◮◮ de la taille des données passées en paramètres : plus ces données seront volumineuses, plus il faudra
d’opérations élémentaires pour les traiter. On notera n le nombre de données à traiter.
◮◮◮ de la donnée en elle même, de la façon dont sont réparties les différentes valeurs qui la constituent.
∃n 0 ∈ N, ∃c ∈ R+ , ∀n ≥ n 0 =⇒ |T (n)| ≤ c | f (n)|
C’est à dire :
T (n) est en Θ( f (n)) s’il existe un seuil n 0 à partir duquel la fonction T est toujours dominée par la
fonction f , à une constante multiplicative fixée c près.
1
3 Classes de complexité
Θ Type de complexité
Θ(1) Constante
Θ(log(n)) logarithmique
Θ(n) linéaire
Θ(n × log(n)) quasi–linéaire
2
Θ(n ) quadratique
Θ(n 3 ) cubique
n
Θ(2 ) exponentielle
Θ(n!) factorielle
def fct(n):
s = 0
for i in range(1,n+1):
s += i
return s
print( fct(11) )
affectation : 1 (pour s)
Conclusion :
Ainsi, au total, il y a 3n + 1 opérations élémentaires, qui correspond à la complexité de la fonction. On dit
ici que la complexité est linéaire car T (n) = 3n + 1, c’est à dire que la complexité est en Θ(n).
2
4.2 Complexité d’un algorithme avec une boucle dans une autre
Exemple
def fctB(n):
s = 0
for i in range(1,n+1):
s += i
return s
def fctA(n):
P = 1
for j in range(1,n+1):
P *= fctB(j)
return P
print( fctA(10) )
On voit qu’il y a 1 première affectation (P = 1) puis, pour chaque valeur de j, il y a 1 affectation (pour la
variable j elle–même), suivie de 3j + 1 pour le calcul de fctB(j), 1 autre opération (le produit de P par fctB(j))
et enfin 1 affectation pour P.
Conclusion :
La complexité totale est
n(n + 1) 3 2 11
n × 1 + 3(1 + 2 + 3 + · · · + n) + n × 1 + 2 × n = 4n + 3 × = n + n
2 2 2
Conclusion :
3 11
On dit ici que la complexité est quadratique car T (n) = n 2 + n est un polynôme de degré 2, c’est à dire
2 2
que la complexité est en Θ(n 2 ).
E XERCICE —A PPLICATION 1 (exercice de recherche).
Calculer la complexité de l’algorithme de la recherche dichotomique.