Adloun

Compter les inversions

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 3 — Boucles imbriquées et complexité quadratique

Énoncé

Une inversion dans un tableau est un couple d'indices tel que . Écrire nb_inversions(t) en . Démontrer que le nombre d'échanges effectués par le tri à bulles est égal au nombre d'inversions initial du tableau.

Corrigé

def nb_inversions(t: list) -> int:
    c = 0
    for i in range(len(t)):
        for j in range(i + 1, len(t)):
            if t[i] > t[j]:
                c += 1
    return c

Démonstration :

  1. Le tri à bulles n'échange que des éléments adjacents mal ordonnés . Un tel couple constitue une inversion.
  2. L'échange de et transforme cette paire ordonnée de façon croissante. L'inversion disparait.
  3. Cet échange d'éléments adjacents ne modifie pas la position relative de ces deux éléments par rapport au reste du tableau (tout autre élément garde la même relation d'ordre avec et ).
  4. Chaque échange diminue le nombre d'inversions du tableau d'exactement 1.
  5. Le tableau est trié si et seulement si son nombre d'inversions est nul. Le nombre total d'échanges est donc égal au nombre d'inversions initial.

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.