Informatique Chapitre 9: Variants et invariants de boucle

publicité
Informatique
Chapitre 9: Variants et invariants de boucle
Jérôme D IDIER
19/11/2014
O BJECTIFS VARIANT I NVARIANT
Objectifs du cours
Compétences visées
I
Justifier qu’une itération (ou boucle) produit l’effet attendu au moyen
d’un invariant
I
Démontrer qu’une boucle se termine effectivement (variant de boucle)
I
Connaitre les moyens de sortir des boucles sans les parcourir
entièrement
J. Didier
Informatique Chapitre 9
2
O BJECTIFS VARIANT I NVARIANT
Objectif
Comment stopper une boucle ?
Dans une boucle for ou while, on veut pouvoir s’arrêter si on réalise une
condition.
Exemple 1 : Chercher le premier entier naturel divisible par 6, par 7 et par 8.
Solutions naïves (une avec for et une avec while) ?
J. Didier
Informatique Chapitre 9
3
O BJECTIFS VARIANT I NVARIANT
Objectif
Comment stopper une boucle ?
Dans une boucle for ou while, on veut pouvoir s’arrêter si on réalise une
condition.
Exemple 1 : Chercher le premier entier naturel divisible par 6, par 7 et par 8.
Solutions naïves (une avec for et une avec while) ?
J. Didier
Informatique Chapitre 9
3
O BJECTIFS VARIANT I NVARIANT
Solution : utiliser la commande break
L’instruction break : fin de boucle « brutale » :
Si le programme rencontre une instruction break, la boucle indentée
correspondante est interrompue.
Exemple 1 : Chercher le premier entier naturel divisible par 6, par 7 et par 8.
Nouvelles solutions (une avec for et une avec while) ?
J. Didier
Informatique Chapitre 9
4
O BJECTIFS VARIANT I NVARIANT
Solution : utiliser la commande break
L’instruction break : fin de boucle « brutale » :
Si le programme rencontre une instruction break, la boucle indentée
correspondante est interrompue.
Exemple 1 : Chercher le premier entier naturel divisible par 6, par 7 et par 8.
Nouvelles solutions (une avec for et une avec while) ?
J. Didier
Informatique Chapitre 9
4
O BJECTIFS VARIANT I NVARIANT
Rappels : Les boucles
L’instruction while : boucle conditionnelle, tant que
while condition :
bloc_d_instructions
L’instruction for : boucle sur un itérable (liste, range, chaine de caractères)
for variable in iterable :
bloc_d_instructions
Les boucles while et for sont interchangeables mais un type est souvent
(beaucoup) plus adapté que l’autre.
J. Didier
Informatique Chapitre 9
5
O BJECTIFS VARIANT I NVARIANT
Rappels : Les boucles
L’instruction while : boucle conditionnelle, tant que
while condition :
bloc_d_instructions
L’instruction for : boucle sur un itérable (liste, range, chaine de caractères)
for variable in iterable :
bloc_d_instructions
Les boucles while et for sont interchangeables mais un type est souvent
(beaucoup) plus adapté que l’autre.
J. Didier
Informatique Chapitre 9
5
O BJECTIFS VARIANT I NVARIANT
Rappels : Les boucles
L’instruction while : boucle conditionnelle, tant que
while condition :
bloc_d_instructions
L’instruction for : boucle sur un itérable (liste, range, chaine de caractères)
for variable in iterable :
bloc_d_instructions
Les boucles while et for sont interchangeables mais un type est souvent
(beaucoup) plus adapté que l’autre.
J. Didier
Informatique Chapitre 9
5
O BJECTIFS VARIANT I NVARIANT
Rappels : Les boucles
L’instruction while : boucle conditionnelle, tant que
while condition :
bloc_d_instructions
L’instruction for : boucle sur un itérable (liste, range, chaine de caractères)
for variable in iterable :
bloc_d_instructions
Les boucles while et for sont interchangeables mais un type est souvent
(beaucoup) plus adapté que l’autre.
J. Didier
Informatique Chapitre 9
5
O BJECTIFS VARIANT I NVARIANT
Rappels : Le variant de boucle
Classiquement, la condition porte sur un compteur qui augmente ou diminue
à chaque itération de la boucle. La méthode classique et certaine est
d’utiliser un entier positif qui décroît car on est sûr que la boucle se finit
lorsque l’entier est nul. Cet entier est appelé variant de boucle. Pour
identifier si une boucle se termine effectivement, il faut
I
identifier le variant de boucle et vérifier qu’il est positif
I
vérifier qu’il décroît effectivement et strictement à chaque itération
I
dans le cas contraire, on rencontre une boucle infinie.
Rappelons enfin qu’on peut très bien choisir un variant qui augmente et
mettre une condition sur une valeur qu’il ne doit pas dépasser.
J. Didier
Informatique Chapitre 9
6
O BJECTIFS VARIANT I NVARIANT
Exemples
Soit la suite numérique un+1 = un − 2n avec u0 = 21.
Exemple 1 : Calcul des n premiers termes
inc ,u = n ,21
while inc >=0:
print (’Terme ’+ str(n−inc) +’ = ’+str(u))
u=u−2∗(n−inc)
inc=inc−1
Qui est le variant ? Vérifie-t-il les conditions ?
J. Didier
Informatique Chapitre 9
7
O BJECTIFS VARIANT I NVARIANT
Exemples
Soit la suite numérique un+1 = un − 2n avec u0 = 21.
Exemple 2 : Pour quel rang la suite devient-elle négative
inc ,u = n ,21
while u >=0:
print (’Terme ’+ str(n−inc) +’ = ’+str(u))
u=u−2∗(n−inc)
inc=inc−1
Qui est le variant ? Vérifie-t-il les conditions ?
J. Didier
Informatique Chapitre 9
8
O BJECTIFS VARIANT I NVARIANT
Principe général
Lors de la réalisation d’un algorithme, il est nécessaire :
I
de vérifier que celui-ci permet bien de répondre au problème initial ;
I
de s’assurer que celui-ci se termine sans quoi le résultat du problème
ne sera jamais délivré à l’utilisateur.
Une des manières les plus efficaces pour démontrer qu’un algorithme est
correct, est d’établir un invariant de boucle, c’est à dire une propriété qui
est vraie tout au long de l’exécution d’une boucle.
Pour démontrer qu’un algorithme se termine bien, on utilise un variant de
boucle.
L’utilisation d’un variant et d’un invariant est différente, mais
complémentaire.
J. Didier
Informatique Chapitre 9
9
O BJECTIFS VARIANT I NVARIANT
Principe général
Lors de la réalisation d’un algorithme, il est nécessaire :
I
de vérifier que celui-ci permet bien de répondre au problème initial ;
I
de s’assurer que celui-ci se termine sans quoi le résultat du problème
ne sera jamais délivré à l’utilisateur.
Une des manières les plus efficaces pour démontrer qu’un algorithme est
correct, est d’établir un invariant de boucle, c’est à dire une propriété qui
est vraie tout au long de l’exécution d’une boucle.
Pour démontrer qu’un algorithme se termine bien, on utilise un variant de
boucle.
L’utilisation d’un variant et d’un invariant est différente, mais
complémentaire.
J. Didier
Informatique Chapitre 9
9
O BJECTIFS VARIANT I NVARIANT
Principe général
Lors de la réalisation d’un algorithme, il est nécessaire :
I
de vérifier que celui-ci permet bien de répondre au problème initial ;
I
de s’assurer que celui-ci se termine sans quoi le résultat du problème
ne sera jamais délivré à l’utilisateur.
Une des manières les plus efficaces pour démontrer qu’un algorithme est
correct, est d’établir un invariant de boucle, c’est à dire une propriété qui
est vraie tout au long de l’exécution d’une boucle.
Pour démontrer qu’un algorithme se termine bien, on utilise un variant de
boucle.
L’utilisation d’un variant et d’un invariant est différente, mais
complémentaire.
J. Didier
Informatique Chapitre 9
9
O BJECTIFS VARIANT I NVARIANT
Invariant de boucle
Définition
Un invariant de boucle est une propriété ou une formule logique,
I
qui est vérifiée après la phase d’initialisation ;
I
qui reste vraie après l’exécution d’une itération (conservation) ;
I
et qui, conjointement à la condition d’arrêt (terminaison), permet de
montrer que le résultat attendu et bien le résultat calculé.
Principe similaire à la récurrence en Maths
J. Didier
Informatique Chapitre 9
10
O BJECTIFS VARIANT I NVARIANT
Invariant de boucle
Définition
Un invariant de boucle est une propriété ou une formule logique,
I
qui est vérifiée après la phase d’initialisation ;
I
qui reste vraie après l’exécution d’une itération (conservation) ;
I
et qui, conjointement à la condition d’arrêt (terminaison), permet de
montrer que le résultat attendu et bien le résultat calculé.
Principe similaire à la récurrence en Maths
J. Didier
Informatique Chapitre 9
10
O BJECTIFS VARIANT I NVARIANT
Invariant de boucle
Définition
Un invariant de boucle est une propriété ou une formule logique,
I
qui est vérifiée après la phase d’initialisation ;
I
qui reste vraie après l’exécution d’une itération (conservation) ;
I
et qui, conjointement à la condition d’arrêt (terminaison), permet de
montrer que le résultat attendu et bien le résultat calculé.
Principe similaire à la récurrence en Maths
J. Didier
Informatique Chapitre 9
10
O BJECTIFS VARIANT I NVARIANT
Invariant de boucle
Définition
Un invariant de boucle est une propriété ou une formule logique,
I
qui est vérifiée après la phase d’initialisation ;
I
qui reste vraie après l’exécution d’une itération (conservation) ;
I
et qui, conjointement à la condition d’arrêt (terminaison), permet de
montrer que le résultat attendu et bien le résultat calculé.
Principe similaire à la récurrence en Maths
J. Didier
Informatique Chapitre 9
10
O BJECTIFS VARIANT I NVARIANT
Invariant de boucle
Définition
Un invariant de boucle est une propriété ou une formule logique,
I
qui est vérifiée après la phase d’initialisation ;
I
qui reste vraie après l’exécution d’une itération (conservation) ;
I
et qui, conjointement à la condition d’arrêt (terminaison), permet de
montrer que le résultat attendu et bien le résultat calculé.
Principe similaire à la récurrence en Maths
J. Didier
Informatique Chapitre 9
10
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 1 : Division euclidienne de n par d
q,r=0,n
while r >=d:
q = q + 1
r= r − d
Testons cela sur l’exemple n = 13 et d = 3. Vérifions que cet algorithme se
termine bien et qu’il renvoie bien un résultat correct.
I
Déterminer un invariant de boucle
I
Vérifier que cette propriété est vraie avant la boucle (initialisation)
I
Vérifier qu’elle reste vraie à chaque itération (conservation)
Vérifier que la boucle se termine (terminaison)
I
J. Didier
Informatique Chapitre 9
11
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 1 : Division euclidienne de n par d
q,r=0,n
while r >=d:
q = q + 1
r= r − d
Testons cela sur l’exemple n = 13 et d = 3. Vérifions que cet algorithme se
termine bien et qu’il renvoie bien un résultat correct.
I
Déterminer un invariant de boucle n = q∗d + r
I
Vérifier que cette propriété est vraie avant la boucle (initialisation)
I
Vérifier qu’elle reste vraie à chaque itération (conservation)
Vérifier que la boucle se termine (terminaison)
I
J. Didier
Informatique Chapitre 9
11
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant :
Initialisation :
Conservation :
I
Avant le passage dans la boucle :
I
Après le passage dans la boucle :
Terminaison :
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant : y = 2∗∗n_loc
Initialisation :
Conservation :
I
Avant le passage dans la boucle :
I
Après le passage dans la boucle :
Terminaison :
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant : y = 2∗∗n_loc
Initialisation :y =1 et n_loc = 0
Conservation :
I
Avant le passage dans la boucle :
I
Après le passage dans la boucle :
Terminaison :
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant : y = 2∗∗n_loc
Initialisation :y =1 et n_loc = 0
Conservation :
I
Avant le passage dans la boucle : y = 2∗∗n_loc
I
Après le passage dans la boucle :
Terminaison :
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant : y = 2∗∗n_loc
Initialisation :y =1 et n_loc = 0
Conservation :
I
I
Avant le passage dans la boucle : y = 2∗∗n_loc
Après le passage dans la boucle : y = 2∗y = 2∗2∗∗n_loc et
n_loc = n_loc + 1
Terminaison :
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 2 : Calcul de 2n
y, n_loc = 1,0
while n_loc < n:
y = y ∗2
n_loc += 1
Vérification
Invariant : y = 2∗∗n_loc
Initialisation :y =1 et n_loc = 0
Conservation :
I
Avant le passage dans la boucle : y = 2∗∗n_loc
I
Après le passage dans la boucle : y = 2∗y = 2∗2∗∗n_loc et
n_loc = n_loc + 1
Terminaison : n_loc croit strictement à chaque itération, la sortie de boucle
est assurée par le fait que l’on ne peut dépasser la valeur n.
J. Didier
Informatique Chapitre 9
12
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 3 : Suite de Fibonacci
Réaliser un programme qui calcule les n premiers termes de la suite de
Fibonacci.
La suite de Fibonacci est la suite de nombres définie par récurrence par
u0 = 1, u1 = 1 et pour n ≥ 2 par un = un−1 − un−2
Vérification
I Prouver que votre programme se termine bien (terminaison)
I Montrer que votre algorithme produit bien le résultat attendu à l’aide
d’un invariant de boucle
I
I
Vérifier que cette propriété est vraie avant la boucle (initialisation)
Vérifier qu’elle reste vraie à chaque itération (conservation)
J. Didier
Informatique Chapitre 9
13
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 3 : Suite de Fibonacci - Solution possible
Vérifier que l’invariant proposé est correct.
Vérification
n = 20
fprec ,f = 1,1 #i n i t i a l i s a t i o n
fib = [fprec ,f]
i = 2
while i < n:
temp = f + fprec
fprec = f
f = temp
i = i + 1
fib. append (f)
print (fib)
# invariant fprec = fib [ i−1] et f = fib [ i ]
J. Didier
Informatique Chapitre 9
14
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : []
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [Valet]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [9,Valet]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [9,Valet,As]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [9,10,Valet,As]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [9,10,Valet,Roi,As]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant : [7,9,10,Valet,Roi,As]
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant :
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : []
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [4, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [4, 7, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [3, 4, 7, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [2, 3, 4, 7, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [2, 3, 4, 7, 8, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 4 : Tri par insertion
Il s’agit de l’algorithme classique que vous utilisez lorsque vous triez un jeu
de carte. On trie en plaçant l’élément à sa place.
Exemple avec un jeu de cartes
On veut trier cette main : [Valet,9,As,10,Roi,7].
On réalise le tri suivant :
Exemple sur une liste
On veut trier la liste L = [12, 4, 7, 3, 2, 8, 9].
On réalise le tri suivant : [2, 3, 4, 7, 8, 9, 12]
Invariant
Quelle propriété est vérifiée à chaque itération ?
J. Didier
Informatique Chapitre 9
15
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 5 : Tri par selection
Pour une liste de n éléments (numérotée de 1 à n) :
I On détermine le plus petit élément puis on le place à l’indice 1
I
On détermine le second plus petit élément puis on le place à l’indice 2
I
...
Code
L = [12 ,4 ,7 ,3 ,2 ,8 ,9]
# Algorithme de t r i par selection
for k in range (0, len(L)) :#parcours de la l i s t e
min = k
for l in range(k+1, len(L)) :#determination
if L[l] < L[min] :
min = l
if min is not k :#si k différent
L[k],L[min] = L[min],L[k]
J. Didier
du minimum
de min on i n t e r v e r t i t les élément
Informatique Chapitre 9
16
O BJECTIFS VARIANT I NVARIANT
Exemples
Exemple 5 : Tri par selection
Pour une liste de n éléments (numérotée de 1 à n) :
I On détermine le plus petit élément puis on le place à l’indice 1
I
On détermine le second plus petit élément puis on le place à l’indice 2
I
...
Code
L = [12 ,4 ,7 ,3 ,2 ,8 ,9]
# Algorithme de t r i par selection
for k in range (0, len(L)) :#parcours de la l i s t e
min = k
for l in range(k+1, len(L)) :#determination
if L[l] < L[min] :
min = l
if min is not k :#si k différent
L[k],L[min] = L[min],L[k]
J. Didier
du minimum
de min on i n t e r v e r t i t les élément
Informatique Chapitre 9
16
Téléchargement