Évaluation Expérimentale
\( T(n) = \text{Temps d'exécution} \)
Mesure empirique de performance
Métriques mesurées :
Temps d'exécution
Utilisation mémoire
Comparaisons effectuées
Échanges dans un tri
Utilisation mémoire
Comparaisons effectuées
Échanges dans un tri
Définition :
Analyse pratique des performances d'un algorithme par des tests réels
Méthodologie
Créer des jeux de données test
Mesurer le temps d'exécution
Représenter les résultats graphiquement
Répéter plusieurs fois pour lisser les résultats
Comparer avec la complexité théorique
Bonnes Pratiques
Variations de taille de données
Données aléatoires, triées, inversées
Conditions matérielles stables
Méthodes & Conseils
Utiliser time.time() ou time.perf_counter()
Calculer la moyenne de plusieurs exécutions
Isoler le code à tester
Tracer courbes pour observer tendances
Valider avec des cas simples connus
Code Exemple
# Mesure du temps d'exécution
import time
def mesure_temps(algo, donnees):
debut = time.perf_counter()
resultat = algo(donnees)
fin = time.perf_counter()
return fin - debut
# Génération de données
import random
def genere_donnees(n):
return [random.randint(1, 1000) for _ in range(n)]
Avantages & Limites
Avantages : Résultats concrets, applicables au contexte réel
Limites : Dépend du matériel, limité aux tailles testées
Complémentarité : Valide les analyses théoriques
Observation : Permet de détecter anomalies de performance
Applications Pratiques
Comparaison d'algorithmes :
Tri rapide vs tri fusion
Recherche linéaire vs recherche binaire
Différentes implémentations d'un même algorithme
Recherche linéaire vs recherche binaire
Différentes implémentations d'un même algorithme
Validation de performances :
Vérification de la complexité annoncée
Identification des seuils de performance
Optimisation empirique
Identification des seuils de performance
Optimisation empirique