Outils pour utilisateurs

Outils du site


nsi:premiere:tableau:tri:selection

Ceci est une ancienne révision du document !



Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Constant SVG_DPI already defined in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 75

Warning: Undefined variable $ml_array in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 264

Warning: Undefined array key "inResponsiveUnits" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 282

Warning: Undefined array key "hasCssClasses" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 301

Warning: Undefined array key "print" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 322

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Tri par sélection

Principe

Tout le long de l'algorithme, on considère deux zones du tableau. L'une à gauche – sur fond orange dans l'exemple – et l'autre à droite – sur fond jaune dans l'exemple.

L'algorithme est constitué principalement d'une boucle répétitive. À chaque exécution de cette boucle, on sélectionne le plus petit élément parmi les jaunes et on le déplace à la suite de la zone orange. La zone orange s'en trouve augmentée d'un élément – ce qui diminue la jaune.

La boucle s'arrête quand la zone jaune ne compte plus qu'un seul élément. Le tableau est alors trié.


Le tableau donné en exemple contient 8 items. Combien de recherche de plus petit élément doit-on faire ? Et si le tableau contenait n items ?

La recherche du plus petit élément est plus ou moins coûteuse selon le nombre d'items à considérer. Dans l'exemple, lors du premier passage, il faut chercher parmi 8 items ; lors du 2e passage, parmi 7 items… Ce cumul donne une bonne estimation du nombre de calculs élémentaires nécessaires pour ce tri :

$$8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 36$$

Preuve de correction

On profite de notre travail sur les algorithmes de tri pour réfléchir aux problèmes de correction.

Un algorithme est correct si pour toutes les entrées permises :

  • il termine en un temps fini,
  • il donne la réponse attendue

Terminaison

La boucle répétitive s'exécute tant qu'il reste plus d'un item dans la zone jaune.

À vous : justifiez que cette boucle arrive forcément à sa fin.

Validité de la réponse

On veut prouver qu'à la fin de l'algorithme, les items du tableau sont bien dans l'ordre croissant.

À vous : justifiez que :

  1. les items de la zones oranges sont toujours inférieurs ou égaux à ceux de la zone jaune,
  2. les items de la zone orange sont dans l'ordre
  3. le tableau est dans l'ordre à la fin de l'exécution

L'algorithme

FONCTION tri_par_selection
ENTRÉE: tab, le tableau à trier
La fonction ne renvoie rien, le tableau est trié en place
DÉBUT
    soit n la longueur de tab
    POUR i ALLANT DE 0 À n - 2 FAIRE
        soit i_min, le rang du plus petit item dans tab à partir de i
        intervertir les items aux rangs i_min et i
    FIN
FIN

On dirait qu'il n'y a qu'une seule boucle POUR. Mais il y en a une 2e cachée : la recherche de i_min nécessite de prévoir une boucle supplémentaire !

# recherche de i_min, rang du plus petit item,
# dans tab, à partir du rang i
soit i_min = i
POUR i ALLANT DE i À n - 1 FAIRE
    SI élément en j est plus petit que celui en i_min ALORS
        i_min = j
    FIN
FIN
  1. À quoi correspond le i de la boucle POUR ?
  2. Pourquoi i ne va que jusqu'à n - 2 ?
  3. Implémentez cet algorithme en Python.
  4. En fonction de n, et en considérant que chaque ligne de votre programme s'exécute en un temps T, quelle sera la durée totale de ce tri ?
nsi/premiere/tableau/tri/selection.1670500662.txt.gz · Dernière modification : de goupillwiki