← Retour au sommaire

Fiche résumé – Algorithmique appliquée

Chapitre 25 | BTS | Mathématiques

Dernière mise à jour : 21 juin 2026

L'essentiel :

Définitions clés

Définition

Notation Big-O : \(O(f(n))\) décrit la croissance asymptotique du nombre d'opérations selon la taille \(n\). On ne garde que le terme dominant : \(3n^2+5n+2\in O(n^2)\).

Définition

Pile (LIFO) : push / pop au sommet. File (FIFO) : enqueue à l'arrière, dequeue à l'avant.

Définition

Récursivité : fonction qui s'appelle elle-même, avec un cas de base (arrêt) et un appel sur un problème de taille strictement plus petite (sinon stack overflow).

Comparaison des algorithmes de tri

AlgorithmeMeilleurMoyenPireStable
Tri à bulles\(O(n)\)\(O(n^2)\)\(O(n^2)\)Oui
Tri par insertion\(O(n)\)\(O(n^2)\)\(O(n^2)\)Oui
Tri par sélection\(O(n^2)\)\(O(n^2)\)\(O(n^2)\)Non
Tri rapide\(O(n\log n)\)\(O(n\log n)\)\(O(n^2)\)Non
Tri fusion\(O(n\log n)\)\(O(n\log n)\)\(O(n\log n)\)Oui
Python sort()\(O(n)\)\(O(n\log n)\)\(O(n\log n)\)Oui

Classes de complexité

\(O(1)\)\(O(\log n)\)\(O(n)\)\(O(n\log n)\)\(O(n^2)\)\(O(2^n)\)
accès indicedichotomieparcourstri rapide / fusiontris simplesFibonacci naïf

Repères à connaître

Dichotomie et récursivité \[\text{Dichotomie}:\ \text{au plus }\lceil\log_2 n\rceil\text{ comparaisons}\quad(n=10^6\Rightarrow 20)\] \[\text{Hanoï}:\ 2^n-1\text{ déplacements}\qquad\text{Fibonacci naïf}:\ T(n)\approx 2^n\]
Coûts des structures (tableau vs liste chaînée)

Méthodes

Méthode Analyser et écrire un algorithme
  1. Comprendre le problème : entrées, résultat, contraintes.
  2. Choisir la structure : accès rapide → tableau ; LIFO → pile ; FIFO → file/deque.
  3. Choisir l'algorithme : trié → dichotomique ; petit tableau → insertion ; grand → tri rapide / sorted().
  4. Tester les cas limites : vide, un élément, déjà trié, trié à l'envers.
  5. Analyser la complexité \(O(\cdot)\) et juger si elle est acceptable.

Erreurs fréquentes

Attention

❌ Lancer une recherche dichotomique sur un tableau non trié.

✅ La dichotomie exige un tableau trié, sinon le résultat est faux.

❌ Utiliser list.pop(0) dans une boucle pour gérer une file.

✅ C'est \(O(n)\) par appel (\(O(n^2)\) au total) : utiliser collections.deque et popleft().

❌ Utiliser la version récursive naïve de Fibonacci pour de grands \(n\).

✅ Elle est en \(O(2^n)\) : préférer l'itératif ou la mémoïsation (\(O(n)\)).

❌ Oublier le cas de base d'une fonction récursive.

✅ Sans condition d'arrêt, on provoque une récursion infinie (stack overflow).