Complexité temporelle

Notations asymptotiques, analyse, classes de complexité

Définitions fondamentales

Complexité temporelle et spatiale

Complexités

  • Complexité temporelle (en temps) : temps de calcul
  • Complexité spatiale (en espace) : mémoire requise
  • Complexité pratique : mesure précise pour une machine donnée
  • Complexité théorique : ordre de grandeur indépendant de la machine

Opérations représentatives

Pour quantifier la complexité, on identifie une ou plusieurs opérations représentatives :

  • Comparaisons de lettres
  • Échanges ou transferts d'éléments
  • Opérations arithmétiques
  • Accès aux données

Taille des données

La taille n des données est : longueur d'un tableau, nombre de lignes/colonnes, etc.

Notations asymptotiques

Notations O, Ω, Θ

Soit g une fonction positive.

Grand O

O(g) = { f | ∃α>0, ∃n₀, ∀n≥n₀, f(n) ≤ α·g(n) }

f est au plus de l'ordre de g.

Grand Ω

Ω(g) = { f | ∃α>0, ∃n₀, ∀n≥n₀, f(n) ≥ α·g(n) }

f est au moins de l'ordre de g.

Grand Θ

Θ(g) = O(g) ∩ Ω(g)

f est exactement de l'ordre de g.

Classes courantes

Notation Désignation
Θ(1) Constante
Θ(ln n) Logarithmique
Θ(n) Linéaire
Θ(n ln n) Quasi-linéaire
Θ(n²) Quadratique
Θ(2ⁿ) Exponentielle
Θ(n!) Factorielle

Règles pratiques

  1. Somme : O(f) + O(g) = O(max(f, g))
  2. Produit : O(f) × O(g) = O(f × g)
  3. Constantes ignorées : O(3n² + 2n + 10) = O(n²)
  4. Base des logarithmes ignorée : O(log₂ n) = O(ln n) = O(log n)

Cas extrêmes et cas moyen

Complexité maximale, minimale et moyenne

Définitions

  • Complexité maximale (pire cas) : pour les données de taille n les plus défavorables
  • Complexité minimale (meilleur cas) : pour les données les plus favorables
  • Complexité moyenne : moyenne sur toutes les données de taille n (nécessite des hypothèses probabilistes)

Exemple : recherche séquentielle

int prem(int x[], int n, int a) {
    for (int k = 0; k < n; k++)
        if (x[k] == a) return k;
    return -1;
}
Cas Comparaisons
Meilleur 1 (a en position 0)
Pire n (a absent ou en dernière position)
Moyenne n/2 + 1/2 (si a présent, position uniforme)
  • Complexité : Ω(1), O(n), Θ(n) en moyenne

Tyrannie de la complexité

Impact du multiplicateur matériel

Aucun progrès technologique ne change la classe de complexité d'un algorithme.

Complexité ×10 ×100 ×1000
Θ(ln n) N¹⁰ N¹⁰⁰ N¹⁰⁰⁰
Θ(n) 10N 100N 1000N
Θ(n²) ≈3N 10N ≈32N
Θ(2ⁿ) ≈N+3 ≈N+7 ≈N+10

Multiplier la puissance par 1000 ne permet de traiter qu'un problème de taille N+10 pour un algorithme exponentiel, contre 1000N pour un algorithme linéaire.