Adloun

Le tri par insertion cherche la place de la carte séquentiellement

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · Variantes des deux tris

Énoncé

Le tri par insertion cherche la place de la carte séquentiellement. Le tableau de gauche étant trié, on peut la chercher par dichotomie (chapitre 8). Écrire cette variante, et mesurer ce qu'elle gagne — et ce qu'elle ne gagne pas.

Corrigé


def position_insertion(t, x, fin):
    """Indice où insérer x dans la tranche triée t[0..fin-1].

    Précondition  : t[0..fin-1] est croissant.
    Postcondition : tous les t[k] pour k < résultat sont <= x, et tous
                    ceux pour résultat <= k < fin sont > x.
    """
    g, d = 0, fin
    while g < d:
        m = (g + d) // 2
        if t[m] > x:
            d = m
        else:
            g = m + 1
    return g

def tri_insertion_dicho(t):
    """Tri par insertion, position trouvée par dichotomie."""
    for i in range(1, len(t)):
        x = t[i]
        p = position_insertion(t, x, i)
        for k in range(i, p, -1):
            t[k] = t[k - 1]
        t[p] = x

Validation : tableaux tirés au hasard — cas passent.

La mesure, sur un tableau trié à l'envers — le pire cas.

insertioninsertion dichotomique
comparaisonsdécalagescomparaisonsdécalages

Rapports quand double : puis puis pour les comparaisons dichotomiques — la signature du ; et , , pour les décalages — la signature du quadratique.

Ce qu'elle gagne, et ce qu'elle ne gagne pas. Les comparaisons passent de à pour : divisées par . Mais les décalages ne bougent pas d'une unité. Or c'est bien eux qui dominent : le tri reste quadratique.

La leçon. On a optimisé ce qui n'était pas le goulot. La dichotomie trouve la place plus vite, mais il faut toujours déplacer physiquement tous les éléments qui sont après. Cette variante n'est utile que si comparer coûte beaucoup plus cher que déplacer — comparer de longues chaînes, par exemple. Avant d'optimiser, mesurer laquelle des deux opérations domine.

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.