Adloun

On appelle inversion d'un tableau un couple d'indices avec et

Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Les deux tris, leurs invariants, leur coût

Énoncé

On appelle inversion d'un tableau un couple d'indices avec et . Montrer que le nombre de décalages du tri par insertion est exactement le nombre d'inversions, et en déduire un encadrement du nombre de comparaisons.

Corrigé


def inversions(t):
    """Nombre de couples (i, j), i < j, avec t[i] > t[j]. Coût quadratique."""
    n = 0
    for i in range(len(t)):
        for j in range(i + 1, len(t)):
            if t[i] > t[j]:
                n = n + 1
    return n

La démonstration. Le tri par insertion ne fait qu'une seule chose qui modifie l'ordre : décaler d'un cran vers la droite un élément t[j-1] strictement plus grand que la carte x qui vient de sa droite. Ce décalage fait donc passer x devant t[j-1] : il supprime exactement une inversion, celle du couple . Il n'en crée aucune autre — les éléments décalés gardent leur ordre relatif. Comme le tableau final, trié, n'a aucune inversion, le nombre total de décalages vaut le nombre d'inversions du tableau initial.

La vérification. Sur tableaux tirés au hasard, avec doublons :


assert decalages == inversions(t)

cas passent. Trois exemples lisibles :

tableauinversionsdécalagescomparaisons
`[5, 2, 8, 1]`
`[1, 2, 3, 4]`
`[4, 3, 2, 1]`

L'encadrement des comparaisons. Chaque décalage est précédé d'une comparaison réussie ; et chaque tour de la boucle externe se termine par au plus une comparaison ratée — celle qui arrête la boucle interne. D'où

Vérifié sur tableaux : aucune assertion ne se déclenche. Sur [1, 2, 3, 4] : , borne haute atteinte. Sur [4, 3, 2, 1] : , borne basse atteinte.

Ce que ce résultat explique. « Le tri par insertion est rapide sur des données presque triées » n'est plus une impression, c'est un théorème : son coût est proportionnel au désordre, mesuré par le nombre d'inversions. Un tableau à éléments et inversions se trie en opérations environ — linéaire si est petit, quadratique seulement si approche son maximum .

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.