Un algorithme mystérieux
Que fait la procédure ci-dessous, sachant qu’elle reçoit en entrée un tableau Tab de N
éléments, chacun de ses éléments pouvant prendre une valeur égale à Vert, Jaune ou Rouge ?
Procédure Rasta (Tab)
Indice_Vert ← 1
Indice_Jaune ← N
Indice_Rouge ← N
tq Indice_Vert <= Indice_Jaune faire
si Tab (Indice_Vert) = Vert
alors
Indice_Vert ← Indice_Vert + 1
sinon
si Tab (Indice_Vert) = Jaune
alors
Tab (Indice_Vert) ← Tab (Indice_Jaune)
Tab (Indice_Jaune) ← Jaune
Indice_Jaune ← Indice_Jaune – 1
sinon
Tab (Indice_Vert) ← Tab (Indice_Jaune)
Tab (Indice_Jaune) ← Tab (Indice_Rouge)
Tab (Indice_Rouge) ← Rouge
Indice_Jaune ← Indice_Jaune – 1
Indice_Rouge ← Indice_Rouge – 1
fsi
fsi
ftq
Fin procédure
Conseil : si vous ne voyez pas du premier coup d’œil la fonction de cette procédure, faites-en
ce qu’on appelle la trace. Pour cela, donnez-vous un tableau Tab de taille raisonnable (8 à 10
éléments suffiront), rempli au hasard d’éléments verts, jaunes ou rouges, et faites tourner
l’algorithme « à la main », en notant l’évolution du contenu du tableau et des variables
auxiliaires chaque fois qu’un changement se produit.
NB 1 : Vous pouvez bien sûr observer le fonctionnement de la procédure en la programmant
et en la faisant exécuter par une machine, mais c’est moins formateur.
NB 2 : Cet algorithme a été inventé par Edsger Dijkstra [ˈɛtsxər ˈdɛɪkstra], un des pères de
l’informatique ; de nationalité hollandaise, il a décrit l’algorithme en utilisant les couleurs
rouge, blanche et bleue.