Cours Info - 9 - Preuve d`algorithme (initiation)

publicité
Cours Info - 9
Preuve d’algorithme (initiation)
D.Malka
MPSI 2015-2016
D.Malka
Cours Info - 9
MPSI 2015-2016
1 / 16
Sommaire
Sommaire
1
Comment montrer qu’un algorithme est correct ?
2
Terminaison d’un algorithme
Variant de boucle
Exemple
3
Preuve d’un algorithme
Rappel : démonstration par récurrence
Invariant de boucle
Exemple
D.Malka
Cours Info - 9
MPSI 2015-2016
2 / 16
Comment montrer qu’un algorithme est correct ?
Sommaire
1
Comment montrer qu’un algorithme est correct ?
2
Terminaison d’un algorithme
Variant de boucle
Exemple
3
Preuve d’un algorithme
Rappel : démonstration par récurrence
Invariant de boucle
Exemple
D.Malka
Cours Info - 9
MPSI 2015-2016
3 / 16
Comment montrer qu’un algorithme est correct ?
Algorithme correct ?
Un algorithme est correct si :
I
il s’arrête,
I
pour toute entrée, il produit le résultat attendu.
D.Malka
Cours Info - 9
MPSI 2015-2016
4 / 16
Comment montrer qu’un algorithme est correct ?
Algorithme correct ?
On peut :
I
tester quelques entrées. . .
I
. . . peut prouver qu’il est incorrect mais pas qu’il est correct.
Il est mieux de prouver logiquement que l’algorithme est correct :
I
terminaison : variant de boucle,
I
résultat attendu : invariant de boucle.
D.Malka
Cours Info - 9
MPSI 2015-2016
5 / 16
Terminaison d’un algorithme
Sommaire
1
Comment montrer qu’un algorithme est correct ?
2
Terminaison d’un algorithme
Variant de boucle
Exemple
3
Preuve d’un algorithme
Rappel : démonstration par récurrence
Invariant de boucle
Exemple
D.Malka
Cours Info - 9
MPSI 2015-2016
6 / 16
Terminaison d’un algorithme
Variant de boucle
Terminaison d’un algorithme
Variant de boucle
Variant de boucle
On appelle variant de boucle, une expression :
I
qui est un entier positif tout au long de la boucle,
I
qui décroît strictement.
Logique : lorsqu’une suite d’entiers {ui } décroît strictement, il existe un rang N à partir
duquel les termes ui sont négatifs. Or dans la boucle ui > 0 ⇒ l’algorithme termine
nécessairement.
Le variant de boucle est souvent le simple contenu d’une variable telle qu’un compteur
de boucle.
D.Malka
Cours Info - 9
MPSI 2015-2016
7 / 16
Terminaison d’un algorithme
Exemple
Terminaison d’un algorithme
Variant de boucle
Un exemple :
Entrées: entier n, réel k
Sorties: réel puissance
c=n
puissance=1
tant que c>0 faire
puissance=puissance*k
c=c-1
retourner puissance
Algorithm 1: Calcul de kn
D.Malka
Cours Info - 9
MPSI 2015-2016
8 / 16
Terminaison d’un algorithme
Exemple
Terminaison d’un algorithme
Variant de boucle
Montrons que l’algorithme s’arrête.
Dans la boucle c est définie par la suite {ci } telle que, dans la boucle :

 c0 = n
ci +1 = ci − 1 ⇒ ∀i , ci +1 < ci

∀i , ci > 0
La suite {ci } est entière, positive et strictement décroissante donc l’algorithme s’arrête.
D.Malka
Cours Info - 9
MPSI 2015-2016
9 / 16
Preuve d’un algorithme
Sommaire
1
Comment montrer qu’un algorithme est correct ?
2
Terminaison d’un algorithme
Variant de boucle
Exemple
3
Preuve d’un algorithme
Rappel : démonstration par récurrence
Invariant de boucle
Exemple
D.Malka
Cours Info - 9
MPSI 2015-2016
10 / 16
Preuve d’un algorithme
Rappel : démonstration par récurrence
Preuve d’un algorithme
Démonstration par récurrence
Démonstration par récurrence
Démonstration par récurrence de la propriété Pn :
I
Initialisation : montrer que Pn est vraie à partir d’un certain rang n0 .
I
Hérédité : montrer que Pn ⇒ Pn+1 .
D.Malka
Cours Info - 9
MPSI 2015-2016
11 / 16
Preuve d’un algorithme
Rappel : démonstration par récurrence
Preuve d’un algorithme
Démonstration par récurrence
Exemple
Montrer par récurrence que la suite définie par :
(
u0 = 2
un+1 =
s’écrit un =
2
3n
1
3
un
.
D.Malka
Cours Info - 9
MPSI 2015-2016
12 / 16
Preuve d’un algorithme
Invariant de boucle
Preuve d’un algorithme
Invariant de boucle
Invariant de boucle
Pour démontrer que l’algorithme produit l’effet attendu, on utilise un invariant de boucle
c’est-à-dire une propriété ou une expression qui :
I
est vérifiée avant d’entrer dans la boucle,
I
reste vraie après chaque itération de la boucle,
I
dont la valeur au rang n (à la sortie de la boucle), est la propriété qu’on veut
démontrer.
Démarche similaire au raisonnement par récurrence.
Difficulté : trouver une expression susceptible d’être un invariant de boucle.
D.Malka
Cours Info - 9
MPSI 2015-2016
13 / 16
Preuve d’un algorithme
Exemple
Preuve d’un algorithme
Exemple
Un exemple :
Entrées: entier n, réel k
Sorties: réel p
c=n
p=1
tant que c>0 faire
p=p*k
c=c-1
retourner p
Algorithm 2: Calcul de kn
D.Malka
Cours Info - 9
MPSI 2015-2016
14 / 16
Preuve d’un algorithme
Exemple
Preuve d’un algorithme
Exemple
Dans la boucle, deux suites {pi } et {ci } sont définies par récurrence :
p0 = 1
c0 = n
et pi +1 = k ∗ pi
et ci +1 = ci − 1
On veut montrer qu’en sortie de la boucle p = k n .
Montrons la proposition Pi : pi = k i est un invariant de boucle.
Si Pi est un invariant de boucle alors à la sortie de la boucle i = n et alors p = pn = k n
(cqfd).
D.Malka
Cours Info - 9
MPSI 2015-2016
15 / 16
Preuve d’un algorithme
Exemple
Preuve d’un algorithme
Exemple
Montrons la proposition Pi : pi = k i .
Initialisation : pour i = 0, p0 = 1 = k 0 et c0 = n donc p0 = k i . P0 est vérifiée.
Récurrence : Pi : pi = k i supposé vraie. Montrons alors que Pi +1 : pi +1 = k i +1 est
vraie.
pi +1 = k ∗ pi = k i
Pi +1 est vraie.
A la sortie de la boucle Pn est vraie donc pn = k n . CQFD ! ! !
D.Malka
Cours Info - 9
MPSI 2015-2016
16 / 16
Téléchargement