
⊲Correction de l’algorithme
L’algorithme TriInsertion présenté ci-dessus résout-il correctement le problème
du tri. La concept d’invariant de boucle va permettre de nous en convaincre.
Considérons la proposition suivante :
Au début de chaque itération (juste avant le test de la ligne 3), le sous-tableau
T[0 : j]est constitué des éléments qui étaient à l’origine dans T [0 : j], mais triés
par ordre croissant.
Cette proposition est appelée un invariant de boucle.
On démontre cette proposition en montrant trois choses :
•Initialisation : La proposition est vraie au début de la première itération.
•Maintenance : Si la proposition est vraie au début d’une itération, elle reste
vraie au début de l’itération suivante.
•Terminaison : La condition d’arrêt de la boucle finie par être satisfaite.
L’invariant de boucle associé à la condition d’arrêt nous donnent alors une aide
précieuse pour démontrer que l’algorithme est correct.
Appliquons cette démarche à notre algorithme.
Initialisation : Au début de la première itération on a j=1, donc T[0 : j]
ne contient que l’élément T[0]qui est le premier élément du tableau initial.
L’invariant de boucle est donc clairement vrai à la première itération.
Maintenance : La boucle intérieure (lignes 7-10) a pour effet de déplacer d’une
position les éléments de T[0 : j]qui sont strictement supérieurs à T[j]. La
valeur T[j]est ensuite copiée dans la position libérée (ligne 11). Le sous-tableau
T[0 : j+1]contient alors les éléments du sous-tableau T[0 : j+1]initial, mais
triés par ordre croissant. L’incrémentation de j(ligne 12) rétablit alors l’invariant
de boucle.
Terminaison : Puisque jest incrémenté à chaque itération, la condition j=T.longueur
finie nécessairement par être satisfaite, ce qui met fin à la boucle.
Ceci prouve que l’algorithme se termine avec l’invariant de boucle et la condition
j=T.longueur satisfaient tous les deux. Nous en déduisons alors que le sous-
tableau T[0 : T.longueur], autrement dit le tableau Tcomplet, est constitué
des éléments qui étaient à l’origine dans T[0 : T.longueur](c’est-à-dire T),
mais triés par ordre croissant. Nous en concluons que l’algorithme TriInsertion
résout correctement le problème du tri.
⊲Temps d’exécution de l’algorithme
Le temps d’exécution d’un algorithme dépend bien entendu de la machine sur la-
quelle il s’exécute. Pour évaluer ce temps d’exécution, nous devons disposer d’un
modèle de machine. Le modèle de machine que nous considérons pour évaluer
le temps d’exécution est la machine RAM (Random Access Memory), modèle sur
lequel repose la très grande majorité des ordinateurs :
•Les instructions de la machine sont les opérations élémentaires sur les
nombres (addition, soustraction, multiplication, division, reste), le dépla-
cement d’octets (ou de mots formés de quelques octets), les instructions de
contrôle (branchement conditionnel ou inconditionel, appel de sous pro-
gramme).
•Les instructions sont exécutées les unes après les autres, il n’y a pas de
parallélisme.
•Chaque instruction nécessite un temps constant.
http://docs.dichotomies.fr/2014/informatique/ipt2/cours/algorithmique/
Denis Pinsard – Mis à jour le lundi 25 août 2014
[PVT856] Page 4