Bonjour à tous,
J'ai devant les yeux un algorithme itératif de tri (qui ressemble pas mal au tri-par-tas) et je me rends compte que théoriquement je sais comment le prouver mais à la pratique je tremblotte...
On a donc :
Pour la terminaison : Lorsque la variable i = n², les 2 boucles pour se terminent ainsi que l'algorithme. (c'est le cas d'arrêt).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 T : tableau de n*n initialisé avec des "-0-"; pour i de 1 à n² faire : Insertion(T,T[i]);//insertion de T[i] dans le tableau T pour i de 1 à n² faire : T[i] = ExtraireMin(T);//qui extrait la valeur la plus petite du tableau T
Pour l'invariant de boucle, je bloque un peu : " Au k-ième tour de boucle, le tableau T, contenant k termes, est trié par ordre croissant ".
En effet, à l'état initial -avant le premier tour de boucle -, on a tableau vide donc trié par ordre croissant. (ça signifie quelque chose ça ?!)
Edit: Pas vide en fait, remplit de -0-... mais ça ne m'aide pas...Oo
Au premier tour de boucle, i = 1 et le tableau T contient 1 élément qui est donc trivialement trié.
Au dernier tour de boucle, i = n² et T contient n termes trié par ordre croissant . (on revient à la terminaison ?!).
Merci d'avance pour l'aide et les explications apportées.
Partager