Complexité algorithmique
Big-O, cas pire
Rédigé par l'équipe éditoriale de RévisionBac d'après le programme officiel · Mis à jour le · Méthodologie
En clair. Big-O, cas pire
Ce qu'on te demande au bac (Spé NSI) : maîtriser le vocabulaire de « Complexité algorithmique », savoir refaire les raisonnements du cours et les réutiliser sur un sujet ou un document nouveau.
Conseil de révision. Lis d'abord cet encadré, puis fais le quiz : si tu bloques, reprends la partie du cours correspondante.
Définitions clés
- Complexité en temps : estimation du nombre d'opérations élémentaires effectuées par un algorithme en fonction de la taille n de l'entrée, indépendamment de la machine.
- Complexité en espace : mémoire supplémentaire utilisée.
- Notation de Landau O(·) : f(n) = O(g(n)) s'il existe c et n₀ tels que f(n) ≤ c·g(n) pour n ≥ n₀. On ne garde que le terme dominant, sans les constantes.
On distingue meilleur cas, cas moyen et pire cas ; on raisonne par défaut sur le pire cas, seule garantie fiable.
Les classes usuelles
| Complexité | Nom | Exemple |
|---|---|---|
| O(1) | constante | accès à t[i], empilement |
| O(log n) | logarithmique | recherche dichotomique |
| O(n) | linéaire | parcours, recherche séquentielle |
| O(n log n) | quasi-linéaire | tri fusion, tri rapide en moyenne |
| O(n²) | quadratique | tri par sélection, tri par insertion |
| O(2ⁿ) | exponentielle | force brute, Fibonacci naïf |
| O(n!) | factorielle | énumération des permutations |
Ordre de croissance : .
Déterminer la complexité d'un code
- instructions successives → on additionne puis on garde le maximum ;
- boucles imbriquées → on multiplie les nombres d'itérations ;
- variable divisée par 2 à chaque tour → log₂ n itérations.
def maximum(t): # n-1 comparaisons -> O(n)
m = t[0]
for x in t:
if x > m:
m = x
return m
def doublons(t): # boucles imbriquées -> O(n^2)
for i in range(len(t)):
for j in range(i+1, len(t)):
if t[i] == t[j]:
return True
return False
Étude de cas : séquentielle contre dichotomie
- Recherche séquentielle : jusqu'à n comparaisons → O(n).
- Recherche dichotomique (tableau trié) : l'espace est divisé par 2 à chaque étape, d'où k comparaisons avec 2ᵏ ≥ n, soit k = ⌈log₂ n⌉ → O(log n).
Exemple chiffré : pour n = 1 000 000, la dichotomie ne demande que 20 comparaisons contre un million. Sur une machine à 10⁸ opérations/s, un algorithme O(n²) avec n = 10⁵ prend ≈ 100 s, contre 0,017 s pour un O(n log n).
Terminaison et correction
- Terminaison : on exhibe un variant de boucle, entier positif strictement décroissant.
- Correction : on exhibe un invariant de boucle, propriété vraie à chaque itération, qui donne le résultat en sortie.
Pour le tri par sélection, l'invariant est : « après l'itération i, les i premières cases contiennent les i plus petits éléments, triés ».
Compromis temps / espace
La mémoïsation de Fibonacci fait passer une complexité O(2ⁿ) à O(n) au prix d'un tableau de taille n : c'est le principe de la programmation dynamique.
Erreurs fréquentes
- ❌ Écrire O(3n² + 5n) : on écrit O(n²).
- ❌ Confondre nombre d'itérations et nombre d'opérations par itération.
- ❌ Penser qu'un O(log n) est toujours plus rapide : pour de petits n, les constantes dominent.
- ❌ Oublier que la dichotomie exige un tableau trié (et que trier coûte O(n log n)).
Quiz de révision
- Complexité du tri par insertion dans le pire cas ? → O(n²).
- Combien de comparaisons pour une dichotomie sur 1024 éléments ? → 10.
- Que garantit un variant de boucle ? → La terminaison.
- Intérêt de la mémoïsation ? → Échanger de l'espace mémoire contre du temps de calcul.
Sources et références
Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.
- 1.Programmes et ressources du lycée général et technologique — Éduscol — Ministère de l'Éducation nationale
- 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat) — education.gouv.fr
- 3.Ressources et programme de NSI — Éduscol
- 4.Documentation du langage Python — Python Software Foundation
- 5.Protection des données et RGPD — CNIL
- 6.Séries statistiques et études économiques — Insee
Contenu vérifié et mis à jour le 10/09/2026. Les liens renvoient vers les sites officiels des éditeurs cités.
Historique éditorial
Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.
- — Dernière mise à jour du cours (relecture et enrichissement)
- — Première publication de la fiche de cours