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