1.65k likes | 1.82k Views
Cours d’Algorithmique. Logique de Hoare (fin) : Les boucles et les invariants. Les grandes lignes du cours. Trier et chercher, recherche textuelle Listes et arbres Le back-track Arbres équilibrés Récursivité et induction sur la structure Divide and conquer, algorithmes gloutons
E N D
Cours d’Algorithmique Logique de Hoare (fin) : Les boucles et les invariants. Cours d'algorithmique 10 / Intranet
Les grandes lignes du cours • Trier et chercher, recherche textuelle • Listes et arbres • Le back-track • Arbres équilibrés • Récursivité et induction sur la structure • Divide and conquer, algorithmes gloutons • Minimax, alpha-beta • Dérécursion • NP-complétude • Logique de Hoare • Programmation dynamique • Complexité et calculabilité Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Rappel : { PRE } programme { POST } • Ceci signifie que • si les pré-conditions sont vérifiées par les arguments, • alors les post-conditions seront vérifiées par les résultats. Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! Q g Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! • Calculons la plus faible condition F telle que { F } g { Q } ! Q g Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! • Calculons la plus faible condition F telle que { F } g { Q } ! F Q g Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! • Calculons la plus faible condition F telle que { F } g { Q } ! • Nous comparons avec le cahier des charges ! ! ! F Q g Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! • Calculons la plus faible condition F telle que { F } g { Q } ! • Nous comparons avec le cahier des charges ! ! ! F Q = POST g PRE Cahier des charges Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • La démarche complète : • Soit la post-condition « Q » ! Soit le programme « g » ! • Calculons la plus faible condition F telle que { F } g { Q } ! • Nous comparons avec le cahier des charges ! ! ! • Et nous vérifions que PRE => F !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! F Q = POST g PRE Cahier des charges Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Trois règles qui sont toujours vraies : • PRE-STRENGTH : • POST-WEAK : • CONJUNCTION : P => Q { Q } g { R } { P } g { R } Q => R { P } g { Q } { P } g { R } { P } g { Q } { P } g { Q } 2 2 1 1 { P , P } g { Q , Q } 2 2 1 1 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Les programmes : • skip • x <- e • g ; g • if C theng elseg • while C dog 1 2 1 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Règle pour le programme skip : e { P } skip { P } Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Règle pour le programme g ; g : 1 2 { P } g { Q } { Q } g { R } 1 2 { P } g ; g { R } 1 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Règle pour le programme x <- e : e { P[ x <- e ] } x <- e { P } Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Règles pour le programme if C then g else g : 1 2 { P , C } g { Q } { P ,ù C } g { Q } 1 2 { P } if C then g else g { Q } 1 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Règles pour le programme if C then g else g : 1 2 { P , C } g { Q } { P ,ù C } g { Q } 1 2 { P } if C then g else g { Q } 1 2 { F }g { Q } { F }g { Q } 1 2 1 2 { F , C } ou { F , ù C } if C then g else g { Q } 1 2 1 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Toutes ces règles sont complètement automatisables ! Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • L’exemple qui nous sert à illustrer la notion d’invariant : • PRE : V , D e N • POST: Q , R e N telles V = Q * D + R et R < D . • C’est la spécification de la division euclidienne ! I I Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 17 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 1 , R = 12 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 1 , R = 17 V = 17 , D = 5 , Q = 2 , R = 12 etc etc ! ! ! V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Encore ! ! ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Encore ! ! ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Aussi ! ! ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R Continuons ! V = 17 , D = 5 , Q = 0 , R = 17 V = 17 , D = 5 , Q = 1 , R = 12 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 2 , R = 12 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 C'est fini ! ! ! V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 C'est fini ! ! ! V = 17 , D = 5 , Q = 2 , R = 7 V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- Exemple : V = 17 , D = 5 Y a-t-il quelque-chose de commun entre les différentes itérations ? Q <- 0 ; R <- V ; while R >= D Q <- Q + 1 ; R <- R - D V = 17 , D = 5 , Q = 0 OUI : V = Q * D + R V = 17 , D = 5 , Q = 0 , R = 17 C'est fini ! ! ! V = 17 , D = 5 , Q = 2 , R = 7 A la fin : V = Q * D + R et R < D V = 17 , D = 5 , Q = 3 , R = 7 V = 17 , D = 5 , Q = 3 , R = 2 Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Les valeurs de V , D , Q , R peuvent changer. • Mais la relation V = Q * D + R reste toujours vérifiée. Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Les valeurs de V , D , Q , R peuvent changer. • Mais la relation V = Q * D + R reste toujours vérifiée. • C’est ce qu’on appelle un « invariant » ! Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Les valeurs de V , D , Q , R peuvent changer. • Mais la relation V = Q * D + R reste toujours vérifiée. • C’est ce qu’on appelle un « invariant » ! • Un invariant est un prédicat qui : Cours d'algorithmique 10 / Intranet
Logique de Hoare----------------------------------------------------------------- • Les valeurs de V , D , Q , R peuvent changer. • Mais la relation V = Q * D + R reste toujours vérifiée. • C’est ce qu’on appelle un « invariant » ! • Un invariant est un prédicat qui : • est vrai à chaque début de boucle, Cours d'algorithmique 10 / Intranet