📘 Fiche de cours
L'essentiel du cours
La complexité algorithmique mesure l'efficacité d'un algorithme en fonction de la taille de l'entrée $n$.
- Complexité temporelle : Temps nécessaire pour exécuter l'algorithme.
- Complexité spatiale : Mémoire nécessaire pour exécuter l'algorithme.
- Notation $O(n)$ : Définit une borne supérieure du temps d'exécution.
- Classes classiques : $O(1)$ (constant), $O(\log n)$ (logarithmique), $O(n)$ (linéaire), $O(n \log n)$ (linéarithmique), $O(n^2)$ (quadratique), $O(2^n)$ (exponentiel).
Méthodes à maîtriser
- Compter les opérations : Identifier la boucle dominante.
- Analyser les boucles : Une boucle simple donne $O(n)$, deux boucles imbriquées donnent $O(n^2)$.
- Réduction de taille : Si l'entrée est divisée par 2 à chaque étape, on obtient $O(\log n)$.
- Simplification : Garder uniquement le terme de plus haut degré et ignorer les constantes (ex: $3n^2 + 5n + 2 \rightarrow O(n^2)$).
Exemples corrigés
- Recherche séquentielle : Parcourir un tableau de taille $n$ est $O(n)$.
- Boucles imbriquées :
Le nombre d'opérations est $n \times n = n^2$, donc $O(n^2)$.pour i de 1 à n: pour j de 1 à n: afficher(i, j)
Erreurs fréquentes
- Oublier de considérer le "pire cas" (Worst Case).
- Confondre le nombre d'instructions avec la classe de complexité.
- Négliger les appels récursifs dans le calcul de la complexité.