📘 Fiche de cours
L'essentiel du cours
La complexité algorithmique permet d'évaluer l'efficacité d'un algorithme en fonction de la taille de ses données d'entrée ($n$).
- Complexité temporelle : Mesure le nombre d'opérations élémentaires effectuées.
- Notation Grand O : On s'intéresse au comportement asymptotique (quand $n$ devient très grand). On néglige les constantes et les termes de plus bas degré.
- Ordres de grandeur classiques :
- $O(1)$ : Temps constant.
- $O(n)$ : Temps linéaire (parcours simple).
- $O(n^2)$ : Temps quadratique (boucles imbriquées).
Méthodes à maîtriser
- Compter les opérations : Identifier les boucles. Une boucle simple de $1$ à $n$ donne $O(n)$. Deux boucles imbriquées donnent $O(n^2)$.
- Identifier le pire cas : Analyser la situation où l'algorithme effectue le maximum d'opérations.
- Simplifier l'expression : Garder uniquement le terme dominant (ex: $3n^2 + 5n + 2$ devient $O(n^2)$).
Exemples corrigés
- Exemple 1 :
for i in range(n): print(i)$\rightarrow$ $O(n)$. - Exemple 2 :
for i in range(n): for j in range(n): pass$\rightarrow$ $O(n^2)$. - Exemple 3 :
x = a + b$\rightarrow$ $O(1)$.
Erreurs fréquentes
- Confondre le temps réel (secondes) avec la complexité (nombre d'opérations).
- Oublier que les opérations constantes à l'intérieur d'une boucle ne changent pas la complexité globale.
- Croire que $O(2n)$ est différent de $O(n)$ : en notation Grand O, les constantes multiplicatives sont ignorées.