Cours d’Algorithmique
description
Transcript of Cours d’Algorithmique
![Page 1: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/1.jpg)
Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1119 décembre 200619 décembre 2006
Cours d’AlgorithmiqueCours d’Algorithmique
Logique de Hoare (fin) :Logique de Hoare (fin) :
Les boucles etLes boucles et
les invariants.les invariants.
![Page 2: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/2.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 22
• Trier et chercher, recherche textuelleTrier et chercher, recherche textuelle• Listes et arbresListes et arbres• Le back-trackLe back-track• Arbres équilibrésArbres équilibrés• Récursivité et induction sur la structureRécursivité et induction sur la structure• Divide and conquer, algorithmes gloutonsDivide and conquer, algorithmes gloutons• Minimax, alpha-betaMinimax, alpha-beta• DérécursionDérécursion• Divers problèmes particuliersDivers problèmes particuliers• Logique de HoareLogique de Hoare• Programmation dynamiqueProgrammation dynamique• Complexité et calculabilitéComplexité et calculabilité
Les grandes lignes du coursLes grandes lignes du cours
![Page 3: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/3.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 33
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
W H I L EW H I L E
e t l e se t l e s
I N V A R I A N T SI N V A R I A N T SD ED E
B O U C L EB O U C L E
![Page 4: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/4.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 44
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• L’exemple qui nous sert à illustrer la notion L’exemple qui nous sert à illustrer la notion d’invariant :d’invariant :
– PRE : V , D PRE : V , D N N
– POST: POST: Q , R Q , R N N
telles V = Q * D + R telles V = Q * D + R et R < D .et R < D .
• C’est la spécification de la division euclidienne !C’est la spécification de la division euclidienne !
II
II
![Page 5: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/5.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 55
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5
V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0
Q <- 0 ;Q <- 0 ;
R <- V ;R <- V ;
while R >= Dwhile R >= D
Q <- Q + 1 ;Q <- Q + 1 ;
R <- R - DR <- R - D
V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17
V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17
V = 17 , D = 5 , Q = 1 , R = 17V = 17 , D = 5 , Q = 1 , R = 17
V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12
V = 17 , D = 5 , Q = 1 , R = 12V = 17 , D = 5 , Q = 1 , R = 12
Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?
OUI : V = Q * D + ROUI : V = Q * D + R
V = 17 , D = 5 , Q = 2 , R = 12V = 17 , D = 5 , Q = 2 , R = 12
V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7
![Page 6: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/6.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 66
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
Exemple : V = 17 , D = 5Exemple : V = 17 , D = 5
V = 17 , D = 5 , Q = 0V = 17 , D = 5 , Q = 0
Q <- 0 ;Q <- 0 ;
R <- V ;R <- V ;
while R >= Dwhile R >= D
Q <- Q + 1 ;Q <- Q + 1 ;
R <- R - DR <- R - D
V = 17 , D = 5 , Q = 0 , R = 17V = 17 , D = 5 , Q = 0 , R = 17
Y a-t-il quelque-chose de communY a-t-il quelque-chose de communentre les différentes itérations ?entre les différentes itérations ?
OUI : V = Q * D + ROUI : V = Q * D + R
V = 17 , D = 5 , Q = 2 , R = 7V = 17 , D = 5 , Q = 2 , R = 7
V = 17 , D = 5 , Q = 3 , R = 7V = 17 , D = 5 , Q = 3 , R = 7
V = 17 , D = 5 , Q = 3 , R = 2V = 17 , D = 5 , Q = 3 , R = 2
A la fin :A la fin :
V = Q * D + RV = Q * D + Retet
R < DR < D
![Page 7: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/7.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 77
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Les valeurs de Les valeurs de V , D , Q , RV , D , Q , R peuvent changer. peuvent changer.
• Mais la relation Mais la relation V = Q * D + RV = Q * D + R reste toujours vérifiée. reste toujours vérifiée.
• C’est ce qu’on appelle un « invariant » !C’est ce qu’on appelle un « invariant » !
• Un invariant est un prédicat qui :Un invariant est un prédicat qui :
– est vrai à chaque début de boucle,est vrai à chaque début de boucle,
– et à chaque fin de boucle,et à chaque fin de boucle,
– c’est-à-dire début de la boucle suivante.c’est-à-dire début de la boucle suivante. (Les tests ne font pas d’affectation !)(Les tests ne font pas d’affectation !)
![Page 8: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/8.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 88
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Pour écrire un corps de boucle, il faut connaître Pour écrire un corps de boucle, il faut connaître l’invariant de la boucle !l’invariant de la boucle !
• Votre code sera exécuté par le « i » tour de Votre code sera exécuté par le « i » tour de boucle, quel que soit la valeur de « i ».boucle, quel que soit la valeur de « i ».
• Pour savoir ce que vous devez faire au « i » tour Pour savoir ce que vous devez faire au « i » tour de boucle, vous devez vous souvenir de ce que de boucle, vous devez vous souvenir de ce que vous avez fait pendant les « i – 1 » premiers tours. vous avez fait pendant les « i – 1 » premiers tours.
• Ceci revient à connaître « l’invariant » !Ceci revient à connaître « l’invariant » !
ee
ee
![Page 9: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/9.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 99
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Quel est l’invariant ?Quel est l’invariant ?
• Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».Avant le « i » tour de boucle, nous avons fait les tours de boucle de « 1 » à « i – 1 ».
• Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».Nous avons donc sommé dans « s » les valeurs de « 1 » à « i – 1 ».
• Invariant :Invariant : s = s = j j
s <- 0 ;s <- 0 ;i <- 1 ;i <- 1 ;
while ( i <= n ) do while ( i <= n ) do
s <- s + i ;s <- s + i ; i <- i + 1 i <- i + 1
ee
j = 1j = 1
i – 1i – 1
![Page 10: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/10.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1010
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Règle pour le programme Règle pour le programme while C dowhile C do : :
• Nous dirons que « I » est l’invariant !Nous dirons que « I » est l’invariant !
• La condition La condition { I , C }{ I , C } { I } { I } vérifie que « I » est bien invariant ! ! !vérifie que « I » est bien invariant ! ! !
• La post-condition La post-condition { I{ I , , C } C } est évidente !est évidente !
• Il suffit alors que Il suffit alors que { I }{ I } soit vrai au début ! soit vrai au début !
{ I }{ I } while C dowhile C do { I{ I , , C } C }
{ I , C }{ I , C } { I }{ I }
![Page 11: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/11.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1111
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Dans la pratique, nous avons une post-condition Dans la pratique, nous avons une post-condition QQ et le code et le code while C dowhile C do : :
• Quel prédicat « I » faut-il choisir comme invariant ?Quel prédicat « I » faut-il choisir comme invariant ?
• C’est l’utilisateur qui doit faire une proposition !C’est l’utilisateur qui doit faire une proposition !
• Nouvelle syntaxe :Nouvelle syntaxe : while C do while C do inv Iinv I
{ ??? }{ ??? } while C dowhile C do { Q }{ Q }
{ ??? , C }{ ??? , C } { ??? }{ ??? }
![Page 12: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/12.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1212
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::
• Nous devons prouver que I , Nous devons prouver que I , C => Q ! C => Q !
• Nous calculons la pré-condition « F » de { F } Nous calculons la pré-condition « F » de { F } { I } ! { I } !
• Nous prouvons que I , C => F !Nous prouvons que I , C => F !
• A ce moment, nous connaissons la pré-condition « I » !A ce moment, nous connaissons la pré-condition « I » !
{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q
{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }
![Page 13: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/13.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1313
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Règle pour le programme Règle pour le programme while C dowhile C do inv I inv I ::
• Attention, il y a deux obligations de preuve !Attention, il y a deux obligations de preuve !
• Elles sont semi-automatisables.Elles sont semi-automatisables.
• Un prouveur peut ne pas trouver la preuve !Un prouveur peut ne pas trouver la preuve !
• Un prouveur ne saura jamais dire si elle n’existe pas ! ! !Un prouveur ne saura jamais dire si elle n’existe pas ! ! !
{ F } { F } { I } { I }I , C => FI , C => F I , I , C => Q C => Q
{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }
![Page 14: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/14.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1414
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
U NU N
P R E M I E RP R E M I E R
E X E M P L EE X E M P L E
![Page 15: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/15.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1515
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• POST :POST :
R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;
while ( R >= D ) dowhile ( R >= D ) do
Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D
inv Iinv I
Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D }
![Page 16: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/16.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1616
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• POST :POST :
R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;
while ( R >= D ) dowhile ( R >= D ) do
Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D
inv Iinv I
Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }
= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }
Sans problème :Sans problème :
I , I , C => Q C => Q
![Page 17: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/17.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1717
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• POST :POST :
R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;
while ( R >= D ) dowhile ( R >= D ) do
Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D
inv Iinv I
Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }
= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }
Sans problème :Sans problème :
I , I , C => Q C => Q
F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }
{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }
{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }
Après simplification !Après simplification !
![Page 18: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/18.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1818
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
{ F } { F } { I } { I } I , I , C => Q C => Q
{ I }{ I } while C dowhile C do inv I inv I { Q }{ Q }
I , C => FI , C => F
{ V = D * Q + R , 0 <= R } { V = D * Q + R , 0 <= R } et et { R >= D }{ R >= D }
!!!!!!!!!!!!=>=>
{ V = D * Q + R , D <= R }{ V = D * Q + R , D <= R }
![Page 19: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/19.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 1919
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• POST :POST :
R <- V ;R <- V ;Q <- 0 ;Q <- 0 ;
while ( R >= D ) dowhile ( R >= D ) do
Q <- Q + 1 ;Q <- Q + 1 ; R <- R – DR <- R – D
inv Iinv I
Q = { V = D * Q + R , 0 <= R < D }Q = { V = D * Q + R , 0 <= R < D } = { V = D * Q + R , 0 <= R } et { R < D }= { V = D * Q + R , 0 <= R } et { R < D }
= { V = D * Q + R , 0 <= R }= { V = D * Q + R , 0 <= R }
Sans problème :Sans problème :
I , I , C => Q C => Q
F = { V = D * Q + R , D <= R }F = { V = D * Q + R , D <= R }
{ V = D * Q + R , 0 <= R }{ V = D * Q + R , 0 <= R }
{ V = D * Q + R – D , 0 <= R – D }{ V = D * Q + R – D , 0 <= R – D }
I = { V = D * Q + R , 0 <= R }I = { V = D * Q + R , 0 <= R }
Sans problème :Sans problème :
I , C => FI , C => F
{ V = D * 0 + R , 0 <= R }{ V = D * 0 + R , 0 <= R }
{ V = D * 0 + V , 0 <= V } = { V >= 0 }{ V = D * 0 + V , 0 <= V } = { V >= 0 }• PRE :PRE :
![Page 20: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/20.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2020
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
U NU N
D E U X I E M ED E U X I E M E
E X E M P L EE X E M P L E
![Page 21: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/21.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2121
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) }Q = { x = pgcd( a , b ) }
![Page 22: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/22.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2222
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }
= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }
Sans problème :Sans problème :
I , I , C => Q C => Q
![Page 23: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/23.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2323
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }
= { pgcd( x , y ) = pgcd( a , b ) }= { pgcd( x , y ) = pgcd( a , b ) }
Sans problème :Sans problème :
I , I , C => Q C => Q
F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }
{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) }
{ pgcd( m , y ) = pgcd( a , b ) }{ pgcd( m , y ) = pgcd( a , b ) }
{ pgcd( m , x%y ) = pgcd( a , b ) }{ pgcd( m , x%y ) = pgcd( a , b ) }
![Page 24: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/24.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2424
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
II , , C C => => FF
{ pgcd( x , y ) = pgcd( a , b ) }{ pgcd( x , y ) = pgcd( a , b ) } et et { y <> 0 }{ y <> 0 }
??????=>=>
{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }
? ? ?? ? ?
Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )
Nous devons renforcer l’invariant :Nous devons renforcer l’invariant :
{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }
![Page 25: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/25.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2525
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }
= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }
Sans problème :Sans problème :
I , I , C => Q C => Q
![Page 26: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/26.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2626
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }
Sans problème :Sans problème :
I , I , C => Q C => Q
F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }
{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }
{ . . . , m >= y }{ . . . , m >= y }
{ . . . , m >= x % y }{ . . . , m >= x % y }
= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }
![Page 27: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/27.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2727
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
II , , C C => => FF
{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y } et et { y <> 0 }{ y <> 0 }
!!!!!!!!!!!!=>=>
{ pgcd( y , x % y ) = pgcd( a , b ) }{ pgcd( y , x % y ) = pgcd( a , b ) }
Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )Maths : x >= y et y <> 0 => pgcd( x , y ) = pgcd( y , x % y )
![Page 28: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/28.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2828
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
x <- a ;x <- a ;y <- b ;y <- b ;
while ( y <> 0 ) dowhile ( y <> 0 ) do
m <- y ;m <- y ; y <- x % y ;y <- x % y ; x <- mx <- m
inv Iinv I
• POST :POST :
Q = { x = pgcd( a , b ) } Q = { x = pgcd( a , b ) } = { pgcd( x , 0 ) = pgcd( a , b ) }= { pgcd( x , 0 ) = pgcd( a , b ) } = { pgcd( x , y ) = pgcd( a , b ) , y = 0 }= { pgcd( x , y ) = pgcd( a , b ) , y = 0 }
Sans problème :Sans problème :
I , I , C => Q C => Q
F = { pgcd( y , x % y ) = pgcd( a , b ) }F = { pgcd( y , x % y ) = pgcd( a , b ) }
{ pgcd( x , y ) = pgcd( a , b ) , x >= y }{ pgcd( x , y ) = pgcd( a , b ) , x >= y }
{ . . . , m >= y }{ . . . , m >= y }
{ . . . , m >= x % y }{ . . . , m >= x % y }
Sans problème :Sans problème :
I , C => FI , C => F
I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }I = { pgcd( x , y ) = pgcd( a , b ) , x >= y }
{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }{ pgcd( a , b ) = pgcd( a , b ) , a >= b } = { a >= b }• PRE :PRE :
= { pgcd( x , y ) = pgcd( a , b ) , x >= y }= { pgcd( x , y ) = pgcd( a , b ) , x >= y }
![Page 29: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/29.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 2929
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
U NU N
T R O I S I E M ET R O I S I E M E
E X E M P L EE X E M P L E
![Page 30: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/30.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3030
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1
inv Iinv I
• POST :POST :
i = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
Sans problème :Sans problème :
I , I , C => Q C => Q
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
i = 1i = 1
c – 1c – 1
![Page 31: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/31.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3131
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1
inv Iinv I
• POST :POST :
i = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
Sans problème :Sans problème :
I , I , C => Q C => Q
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
i = 1i = 1
c – 1c – 1
F = { c <= n , s = F = { c <= n , s = i } i }
I = . . .I = . . .
i = 1i = 1
c – 1c – 1
Après simplification !Après simplification !
![Page 32: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/32.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3232
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1
inv Iinv I
• POST :POST :
i = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
Sans problème :Sans problème :
I , I , C => Q C => Q
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
i = 1i = 1
c – 1c – 1
F = { c <= n , s = F = { c <= n , s = i } i }
I = . . .I = . . .
i = 1i = 1
c – 1c – 1Sans problème :Sans problème :
I , C => FI , C => F
![Page 33: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/33.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3333
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- 0 ;s <- 0 ;c <- 1 ;c <- 1 ;
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c ;s <- s + c ; c <- c + 1c <- c + 1
inv Iinv I
• POST :POST :
i = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
Sans problème :Sans problème :
I , I , C => Q C => Q
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
i = 1i = 1
c – 1c – 1
F = { c <= n , s = F = { c <= n , s = i } i }
I = . . .I = . . .
i = 1i = 1
c – 1c – 1Sans problème :Sans problème :
I , C => FI , C => F
i = 1i = 1
c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }
i = 1i = 1
1 – 11 – 1{ 1 <= n + 1 , 0 = { 1 <= n + 1 , 0 = i } i } = { n >= 0 } = { n >= 0 }• PRE :PRE :
![Page 34: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/34.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3434
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- s <- 11 ; ;c <- c <- 2 2 ;;
while ( c <= n ) dowhile ( c <= n ) do
. . .. . .
i = 1i = 1
c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }
i = 1i = 1
22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 1 1 = = i } i } = { n >= 1 } = { n >= 1 }• PRE :PRE :
• Une autre initialisation :Une autre initialisation :
• POST :POST :
Q = { s = Q = { s = i } i }i = 1i = 1
nn
![Page 35: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/35.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3535
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- s <- 66 ; ;c <- c <- 2 2 ;;
while ( c <= n ) dowhile ( c <= n ) do
. . .. . .
i = 1i = 1
c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }
i = 1i = 1
22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { FAUX } = { FAUX }• PRE :PRE :
• Une mauvaise initialisation :Une mauvaise initialisation :
• POST :POST :
Q = { s = Q = { s = i } i }i = 1i = 1
nn
![Page 36: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/36.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3636
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- s <- 66 ; ;c <- c <- 2 2 ;;
while ( c <= n ) dowhile ( c <= n ) do
. . .. . .
i = 1i = 1
c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }
i = 1i = 1
22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { n >= 1 }= { n >= 1 }• PRE :PRE :
• Une mauvaise initialisation :Une mauvaise initialisation :
• POST :POST :
Q = { s = Q = { s = i } i }i = 1i = 1
nn
![Page 37: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/37.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3737
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
s <- s <- 66 ; ;c <- c <- 2 2 ;;
while ( c <= n ) dowhile ( c <= n ) do
. . .. . .
i = 1i = 1
c – 1c – 1I = { c <= n + 1 , s = I = { c <= n + 1 , s = i } i }
i = 1i = 1
22 – 1 – 1{ { 22 <= n + 1 , <= n + 1 , 6 6 = = i } i } = { n >= 1 , = { n >= 1 , 6 = 1 6 = 1 } } = { n >= 3 }= { n >= 3 }• PRE :PRE :
• Une mauvaise initialisation :Une mauvaise initialisation :
• POST :POST :
Q = { s = Q = { s = i } i }i = 1i = 1
nn
![Page 38: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/38.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3838
• POST :POST :
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Un mauvais invariant :Un mauvais invariant :
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
. . .. . .
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1
inv Iinv Ii = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
i = 1i = 1
c – 1c – 1
Sans problème :Sans problème :
I , I , C => Q C => Q
![Page 39: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/39.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 3939
• POST :POST :
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Un mauvais invariant :Un mauvais invariant :
Q = { s = Q = { s = i } i } = { s = = { s = i , c <= n + 1 , c > n } i , c <= n + 1 , c > n }i = 1i = 1
nn
. . .. . .
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1
inv Iinv Ii = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = i } i }
i = 1i = 1
c – 1c – 1
I = . . .I = . . .
F = { c <= n , s + 3 = F = { c <= n , s + 3 = i } i }i = 1i = 1
c – 1c – 1
Après simplification !Après simplification !
Sans problème :Sans problème :
I , I , C => Q C => Q
![Page 40: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/40.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4040
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
II , , C C => => FF
{ c <= n + 1 , s = { c <= n + 1 , s = i } i } et et { c <= n }{ c <= n }
NONNON=>=>
{ c <= n + 1 , s + 3 = { c <= n + 1 , s + 3 = i } i }i = 1i = 1
c – 1c – 1
i = 1i = 1
c – 1c – 1
////
Sinon, nous aurions 3 = 0 !Sinon, nous aurions 3 = 0 !
![Page 41: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/41.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4141
• POST :POST :
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Un mauvais invariant :Un mauvais invariant :
Q = { s = Q = { s = (i + 3) } (i + 3) } = { s = = { s = (i + 3) , c <= n + 1 , (i + 3) , c <= n + 1 , c > n }c > n }i = 1i = 1
nn
. . .. . .
while ( c <= n ) dowhile ( c <= n ) do
s <- s + c + 3 ;s <- s + c + 3 ; c <- c + 1c <- c + 1
inv Iinv Ii = 1i = 1
c – 1c – 1= { c <= n + 1 , s = = { c <= n + 1 , s = (i + 3) } (i + 3) }
i = 1i = 1
c – 1c – 1
Sans problème :Sans problème :
I , I , C => Q C => Q
I = . . .I = . . .
F = { c <= n , s = F = { c <= n , s = (i + 3) } (i + 3) }i = 1i = 1
c – 1c – 1
Après simplification !Après simplification !
Sans problème :Sans problème :
I , C => FI , C => F
![Page 42: Cours d’Algorithmique](https://reader035.fdocuments.net/reader035/viewer/2022062803/568146bd550346895db3f31a/html5/thumbnails/42.jpg)
19 décembre 200619 décembre 2006 Cours d'algorithmique 10 / IntranetCours d'algorithmique 10 / Intranet 4242
Logique de HoareLogique de Hoare----------------------------------------------------------------------------------------------------------------------------------
• Attention :Attention :
• Tout ceci n’empêche pas un programme de boucler !Tout ceci n’empêche pas un programme de boucler !
• Nous affirmons seulement queNous affirmons seulement que
– si le programme s’arrête,si le programme s’arrête,
– alors il rend le résultat indiqué !alors il rend le résultat indiqué !