Chronométrer les deux tris du cours plutôt que compter leurs…
Exercice supplémentaire · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · Ce que coûte un tri : bornes et mesures
Énoncé
Chronométrer les deux tris du cours plutôt que compter leurs comparaisons. Les rapports mesurés valent-ils ? Pourquoi la mesure de temps est-elle moins fiable que le comptage ?
Corrigé
import time
def duree(f, t, repet=3):
"""Meilleur temps sur plusieurs exécutions, en secondes."""
meilleur = None
for _ in range(repet):
c = list(t)
debut = time.perf_counter()
f(c)
ecoule = time.perf_counter() - debut
meilleur = ecoule if meilleur is None else min(meilleur, ecoule)
return meilleur
| sélection (ms) | rapport | insertion (ms) | rapport | |
|---|---|---|---|---|
| --- | --- | |||
Pour référence, les rapports du comptage des comparaisons sur les mêmes tailles valent , , — trois décimales exactes.
Oui, la loi est là. Les rapports de temps tournent autour de : le coût est bien quadratique, et la mesure le montre. Mais ils oscillent entre et , alors que le comptage donne à trois décimales près.
Pourquoi le temps est moins fiable. Trois causes, toutes hors du programme mesuré :
- la machine fait autre chose en même temps — le temps mesuré n'est pas tout entier consacré au tri ;
- les petites tailles sont dominées par des coûts fixes (appel de fonction, copie du tableau) qui n'ont rien de quadratique ; c'est pourquoi le premier rapport, , est le plus faux ;
- la mémoire cache change de comportement selon la taille des données, par paliers.
La règle de méthode. Compter pour identifier la loi, chronométrer pour savoir si c'est utilisable. Le comptage est reproductible d'une machine à l'autre et se compare à une formule ; le temps répond à la seule question que le comptage ne traite pas — « est-ce assez rapide pour mon usage ? ». Prendre le meilleur de plusieurs exécutions, comme ci-dessus, réduit le bruit sans le supprimer.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.