📘 Fiche de cours
L'essentiel du cours
La complexité mesure l'efficacité d'un algorithme. On distingue :
- Complexité temporelle : Nombre d'opérations élémentaires en fonction de la taille $n$ des données.
- Complexité spatiale : Quantité de mémoire auxiliaire nécessaire.
- Notation $O(f(n))$ : Définit une borne supérieure de la croissance du temps d'exécution. Les classes de complexité usuelles sont : $O(1) < O(\log n) < O(n) < O(n \log n) < O(n^2) < O(2^n)$.
Méthodes à maîtriser
- Comptage des boucles : Une boucle simple de $1$ à $n$ donne $O(n)$. Deux boucles imbriquées donnent $O(n^2)$.
- Division successive : Si on divise la taille du problème par 2 à chaque étape (ex: recherche dichotomique), on obtient $O(\log n)$.
- Analyse du pire cas : Toujours considérer la situation où l'algorithme effectue le maximum d'opérations.
Exemples corrigés
- Somme d'une liste :
for x in L: s += xest $O(n)$. - Recherche dichotomique : Diviser l'espace de recherche par 2 à chaque itération est $O(\log n)$.
- Tri à bulles : Deux boucles imbriquées parcourant $n$ éléments est $O(n^2)$.
Erreurs fréquentes
- Confondre le nombre d'itérations avec la complexité réelle (ex: oublier les opérations internes).
- Négliger les constantes : $O(2n)$ est équivalent à $O(n)$.
- Croire que le meilleur cas est la norme pour l'analyse de complexité.