Adloun

NSI (première) · Chapitre 7 · Exercice de TD

Que se passe-t-il si l'on remplace t j - 1 x par t j - 1 = x

Parcourir, trier, prouver · Les deux tris, leurs invariants, leur coût · niveau 3 (difficile)

Énoncé

Que se passe-t-il si l'on remplace t[j - 1] > x par t[j - 1] >= x ? Le tri reste-t-il correct ? Son coût change-t-il sur un tableau contenant beaucoup de valeurs égales ?

Corrigé

Le tri reste correct. La postcondition « t est croissant et contient les mêmes éléments » est vérifiée dans les deux cas : tableaux tirés au hasard dans — donc pleins de doublons — donnent le même résultat que sorted. L'invariant tient encore : x est déposé après tous les éléments strictement plus petits, ce qui suffit à trier.

Le coût, lui, change du tout au tout. Sur un tableau de éléments tous égaux :

comparaisonsdécalages
avec >
avec >=

Avec >, la condition est fausse d'emblée à chaque tour — c'est le meilleur cas, comparaisons, aucun mouvement. Avec >=, elle est vraie jusqu'au bout : chaque élément traverse toute la partie triée, soit . Le meilleur cas est devenu le pire cas, et le rapport est de cent.

La seconde conséquence : la stabilité est perdue. Trions les couples [(1, 'a'), (1, 'b'), (0, 'c')] sur leur première composante :

avec >[(0, 'c'), (1, 'a'), (1, 'b')]
avec >=[(0, 'c'), (1, 'b'), (1, 'a')]

Avec >=, 'b' est passé devant 'a' : les ex æquo ont été inversés. Sur une table (chapitre 6), cela ruine le tri en deux temps, qui repose entièrement sur la stabilité.

La leçon. Un caractère de plus laisse le programme correct et détruit deux de ses propriétés — le coût dans le meilleur cas, et la stabilité. Un test ordinaire ne verrait rien : le tableau sort trié. La correction n'est pas la seule chose qu'un programme doit garantir.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →