Numérique et Sciences Informatiques • 1ère

Complexité algorithmique élémentaire

Complexité Algorithmique
\( O(f(n)) \)
Notation Big O
Exemples de complexités :
O(1) - Constante
O(log n) - Logarithmique
O(n) - Linéaire
O(n log n) - Quasi-linéaire
O(n²) - Quadratique
Définition :
Mesure de l'efficacité d'un algorithme en fonction de la taille des données
Classes de Complexité
⏱️
O(1) - Temps constant
📈
O(log n) - Croissance logarithmique
➡️
O(n) - Proportionnelle à la taille
🔢
O(n²) - Carrée de la taille
O(2ⁿ) - Exponentielle
Opérations Élémentaires
Affectation, opérations arithmétiques
Comparaisons
📋
Accès aux éléments d'une structure
Méthodes & Conseils
🔍
Compter les instructions dans les boucles
📊
Identifier les cas le pire
🎯
Ignorer les constantes multiplicatives
📉
Considérer uniquement le terme dominant
💡
Analyser la structure de contrôle
Code Exemple
# Recherche linéaire - O(n)
def recherche(tab, x):
    for i in range(len(tab)):
        if tab[i] == x:
            return i
    return -1
# Tri à bulle - O(n²)
def tri_bulle(tab):
    n = len(tab)
    for i in range(n):
        for j in range(0, n-i-1):
            if tab[j] > tab[j+1]:
                tab[j], tab[j+1] = tab[j+1], tab[j]
Règles de Calcul
🔗
Règle de somme : O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
✖️
Règle de produit : O(f(n)) × O(g(n)) = O(f(n) × g(n))
🔄
Boucles imbriquées : O(n) × O(n) = O(n²)
📋
Structures conditionnelles : O(max(branche))
Hiérarchie des Complexités
Ordre croissant d'efficacité :
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(n³) < O(2ⁿ)
Exemples concrets :
Accès tableau : O(1)
Recherche binaire : O(log n)
Parcours tableau : O(n)
Tri rapide : O(n log n)
Tri bulle : O(n²)
Algorithmes classiques Algorithmique et programmation