Instrumenter le tri par insertion pour compter ses comparaisons, et…
Exercice de TD · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · Variants, terminaison, mesure
Énoncé
Instrumenter le tri par insertion pour compter ses comparaisons, et mesurer les trois cas — trié, aléatoire, trié à l'envers — sur des tailles doublantes. Les rapports confirment-ils les lois du cours ?
Corrigé
def tri_insertion_compte(t):
"""Comme tri_insertion, mais rend (comparaisons, décalages)."""
comp = 0
dec = 0
for i in range(1, len(t)):
x = t[i]
j = i
while j > 0:
comp = comp + 1
if t[j - 1] > x:
t[j] = t[j - 1]
j = j - 1
dec = dec + 1
else:
break
t[j] = x
return comp, dec
| trié | aléatoire | à l'envers | ||
|---|---|---|---|---|
(colonne « aléatoire » : moyenne sur tirages par taille.)
Les trois rapports, quand double.
| cas | rapports mesurés | loi |
|---|---|---|
| trié | puis | linéaire, |
| aléatoire | puis | quadratique |
| à l'envers | puis | quadratique, |
Ce que les mesures confirment, et ce qu'elles ajoutent. Le meilleur cas double quand double, le pire quadruple : ce sont exactement les deux lois du cours. La colonne « à l'envers » vaut exactement , ce qui n'est pas une approximation mais une identité — chaque élément traverse toute la partie triée.
L'ajout, c'est la colonne aléatoire : elle quadruple aussi, donc elle est quadratique, mais elle vaut environ la moitié du pire cas ( contre ). Le tri par insertion sur des données quelconques n'est donc pas « entre le linéaire et le quadratique » : il est quadratique, avec un coefficient deux fois plus petit. Un facteur constant ne change pas la loi — et c'est la première chose que la mesure sur trois tailles permet de trancher.
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.