Adloun

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.

casrapports mesurésloi
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.