Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Cours d’Algorithmique
Parcours d’arbres. Induction sur la structure. Back-track. Minimax. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
2
Présentation générale
Les grandes lignes du cours Trier et chercher Listes et arbres Le back-track Arbres équilibrés Récursivité et induction sur la structure Divide and conquer Minimax Dérécursion NP-complétude Logique de Hoare Programmation dynamique Complexité et calculabilité 13 novembre 2006 Cours d'algorithmique 3 - Intranet Cours d'algorithmique
3
Cours d'algorithmique 3 - Intranet
Fibonnacci et les arbres Fibonnacci est une fonction qui comporte deux appels récursifs. Tout appel construit donc deux autres appels. Construisons cet arbre. int fibonnacci (int n) {if ( n == 0 ) return(0); else if ( n == 1 ) return(1); return( fibonnacci(n-1) + fibonnacci(n-2) ); } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
4
Cours d'algorithmique 3 - Intranet
Fibonnacci et les arbres Fibonnacci est une fonction qui comporte deux appels récursifs. Tout appel construit donc deux autres appels. Construisons cet arbre. int fibonnacci (int n) {if ( n == 0 ) return(0); else if ( n == 1 ) return(1); return( fibonnacci(n-1) + fibonnacci(n-2) ); } Les cas d’arrêt. Les appels récursifs. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
5
Cours d'algorithmique 3 - Intranet
Fibonnacci et les arbres ptr_arbre arbre_fibo (int n) {if ( n == 0 ) return( cree_feuille(0) ); else if ( n == 1 ) return( cree_feuille(1) ); return( cree_noeud( arbre_fibo(n-1), arbre_fibo(n-2) ) ) ; } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
6
Cours d'algorithmique 3 - Intranet
Fibonnacci et les arbres arbre_fibo(5) 1 2 3 4 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
7
Cours d'algorithmique 3 - Intranet
Fibonnacci et les arbres On observe que de nombreux calculs sont répétés ! arbre_fibo(5) 1 2 3 4 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
8
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles int somme_arbre_fibo (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( valeur_feuille(arbre) ); else return( somme_arbre_fibo(fils_gauche(arbre)) + somme_arbre_fibo(fils_droit(arbre)) ) ; } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
9
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
10
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 2 1 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
11
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 2 1 1 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
12
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles somme_arbre_fibo(5) = 5 5 1 2 3 4 5 3 2 2 1 1 1 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
13
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles int somme_arbre_fibo (ptr_arbre arbre) {return( somme_acc(arbre , 0) ) ; } int somme_acc(ptr_arbre arbre , int accumule) {if ( est_feuille(arbre) ) return( accumule + valeur_feuille(arbre) ); else return( somme_acc(fils_droit(arbre) , somme_acc(fils_gauche(arbre) , accumule)) ) ; } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
14
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 accumule = 0 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
15
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 accumule = 0 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
16
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles arbre_fibo(5) 1 2 3 4 5 accumule = 0 2 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
17
Cours d'algorithmique 3 - Intranet
Calcul de la somme des feuilles accumule = 5 somme_arbre_fibo(5) = 5 1 2 3 4 5 accumule = 0 2 1 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
18
Cours d'algorithmique 3 - Intranet
Types de parcours L E S T Y P E S D E P A R C O U R S 13 novembre 2006 Cours d'algorithmique 3 - Intranet
19
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
20
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
21
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
22
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
23
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
24
Cours d'algorithmique 3 - Intranet
Types de parcours Ou encore : appel ( fg(a) ) / appel ( fd(a) ) ... Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
25
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours suffixe ou postfixe res_fg = appel ( fd(a) ); res_fd = appel ( fg(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
26
Cours d'algorithmique 3 - Intranet
Types de parcours Ou encore : appel ( fd(a) ) / appel ( fg(a) ) ... Parcours suffixe ou postfixe res_fg = appel ( fd(a) ); res_fd = appel ( fg(a) ); return( ... res_fg ... res_fd ... ); 13 novembre 2006 Cours d'algorithmique 3 - Intranet
27
Cours d'algorithmique 3 - Intranet
Types de parcours Parcours avec opérateur commutatif : l’ordre de parcours est sans importance ! ... oper_commute ( fg(a) , fd(a) ) ... ... oper_commute ( fd(a) , fg(a) ) ... Exemple : notre calcul de la somme de Fibonnacci. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
28
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
29
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
30
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
31
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
32
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
33
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
34
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
35
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
36
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
37
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
38
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
39
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * Impression infixe parenthésée : ( ( ) * 3 ) ( ) * ( + ) 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
40
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * Impression infixe parenthésée : ( ( ) * 3 ) * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
41
Cours d'algorithmique 3 - Intranet
Types de parcours avec étiquettes Traitement de l’étiquette, soit avant, soit après, soit pendant ! Impression préfixe de l’arbre : * Impression postfixe de l’arbre : * Impression infixe parenthésée : ( ( ) * 3 ) * + 3 1 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
42
Cours d'algorithmique 3 - Intranet
Types de parcours M O D I F I C A T I O N D ‘ U N A R B R E 13 novembre 2006 Cours d'algorithmique 3 - Intranet
43
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Nous savons créer un arbre, nous savons parcourir un arbre ! Pouvons-nous modifier un arbre ? OUI soit, en le reconstruisant, soit, en le modifiant physiquement. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
44
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Nous savons créer un arbre, nous savons parcourir un arbre ! Pouvons-nous modifier un arbre ? OUI soit, en le reconstruisant, soit, en le modifiant physiquement. Remplacer 1 3 5 7 par dans 1 2 4 6 13 novembre 2006 Cours d'algorithmique 3 - Intranet
45
Cours d'algorithmique 3 - Intranet
Modification d’un arbre En reconstruisant : Partie qui doit être reconstruite. 3 5 7 2 4 6 13 novembre 2006 Cours d'algorithmique 3 - Intranet
46
Cours d'algorithmique 3 - Intranet
Modification d’un arbre En reconstruisant : Partie qui doit être reconstruite. 3 5 7 2 4 6 cree_noeud( fg(arbre) , cree_noeud( fg(fd(arbre)) , cree_noeud( cree_noeud(cree_feuille(4) , cree_feuille(6)) , fd(fd(fd(arbre))) ) ) ) ; 13 novembre 2006 Cours d'algorithmique 3 - Intranet
47
Cours d'algorithmique 3 - Intranet
Modification d’un arbre En reconstruisant : Partie qui doit être reconstruite. 3 5 7 2 4 6 cree_noeud( fg(arbre) , cree_noeud( fg(fd(arbre)) , cree_noeud( cree_noeud(cree_feuille(4) , cree_feuille(6)) , fd(fd(fd(arbre))) ) ) ) ; 13 novembre 2006 Cours d'algorithmique 3 - Intranet
48
Cours d'algorithmique 3 - Intranet
Modification d’un arbre En modifiant : Pointeur qui est modifié. 3 5 7 2 4 6 13 novembre 2006 Cours d'algorithmique 3 - Intranet
49
Cours d'algorithmique 3 - Intranet
Modification d’un arbre En modifiant : Pointeur qui est modifié. 3 5 7 2 4 6 modifie_fg_noeud( fd(fd(arbre)) , cree_noeud( cree_feuille(4) , cree_feuille(6) ) ) ; 13 novembre 2006 Cours d'algorithmique 3 - Intranet
50
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Attention aux partages de structure avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) ); arbre = cree_noeud( sous_arbre , sous_arbre ); Représentation physique ! 3 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
51
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Attention aux partages de structure avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) ); arbre = cree_noeud( sous_arbre , sous_arbre ); Représentation physique ! L’arbre logique ! ! ! 3 5 3 5 3 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
52
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Attention aux partages de structure avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) ); arbre = cree_noeud( sous_arbre , sous_arbre ); Représentation physique ! L’arbre logique ! ! ! Modification physique. Reconstruction d’arbre. 3 5 9 5 9 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
53
Cours d'algorithmique 3 - Intranet
Modification d’un arbre Attention aux partages de structure avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) ); arbre = cree_noeud( sous_arbre , sous_arbre ); Pas pareil ! ! ! Représentation physique ! L’arbre logique ! ! ! Modification physique. Reconstruction d’arbre. 3 5 9 5 9 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
54
Vous faites ce que vous voulez !
Modification d’un arbre Attention aux partages de structure avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) ); arbre = cree_noeud( sous_arbre , sous_arbre ); Pas pareil ! ! ! Représentation physique ! L’arbre logique ! ! ! Modification physique. Vous faites ce que vous voulez ! Mais, de grâce, assumez ! ! ! Reconstruction d’arbre. 3 5 9 5 9 5 13 novembre 2006 Cours d'algorithmique 3 - Intranet
55
Cours d'algorithmique 3 - Intranet
Induction sur les structures I N D U C T I O N S U R L E S S T R U C T U R E S 13 novembre 2006 Cours d'algorithmique 3 - Intranet
56
Cours d'algorithmique 3 - Intranet
Induction sur les structures Induction simple sur les entiers naturels : On démontre la propriété pour 0, le premier entier naturel. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
57
Cours d'algorithmique 3 - Intranet
Induction sur les structures Induction simple sur les entiers naturels : On démontre la propriété pour 0, le premier entier naturel. On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . C’est le pas d’induction ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
58
Cours d'algorithmique 3 - Intranet
Induction sur les structures Induction simple sur les entiers naturels : On démontre la propriété pour 0, le premier entier naturel. On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . C’est le pas d’induction ! Donc, elle est vraie pour tout entier naturel. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
59
Cours d'algorithmique 3 - Intranet
Induction sur les structures Induction simple sur les entiers naturels : On démontre la propriété pour 0, le premier entier naturel. On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . C’est le pas d’induction ! Donc, elle est vraie pour tout entier naturel. Induction totale sur les entiers naturels : On démontre que la propriété reste vraie pour i+1, si elle est vraie pour tous les entiers de 0 à i . C’est le pas d’induction ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
60
Cours d'algorithmique 3 - Intranet
Induction sur les structures I N D U C T I O N S U R L E S L I S T E S 13 novembre 2006 Cours d'algorithmique 3 - Intranet
61
Cours d'algorithmique 3 - Intranet
Induction sur les listes Induction sur les listes : On démontre la propriété pour la liste vide (ceci ne marche donc pas pour les listes circulaires !). 13 novembre 2006 Cours d'algorithmique 3 - Intranet
62
Cours d'algorithmique 3 - Intranet
Induction sur les listes Induction sur les listes : On démontre la propriété pour la liste vide (ceci ne marche donc pas pour les listes circulaires !). On suppose la propriété vraie pour une liste de longueur i 13 novembre 2006 Cours d'algorithmique 3 - Intranet
63
Cours d'algorithmique 3 - Intranet
Induction sur les listes Induction sur les listes : On démontre la propriété pour la liste vide (ceci ne marche donc pas pour les listes circulaires !). On suppose la propriété vraie pour une liste de longueur i et on démontre qu’elle reste vraie pour la liste de longueur i+1 que l’on obtient en ajoutant un élément (bien choisi) en tête de liste. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
64
Cours d'algorithmique 3 - Intranet
Induction sur les listes Induction sur les listes : On démontre la propriété pour la liste vide (ceci ne marche donc pas pour les listes circulaires !). On suppose la propriété vraie pour une liste de longueur i et on démontre qu’elle reste vraie pour la liste de longueur i+1 que l’on obtient en ajoutant un élément (bien choisi) en tête de liste. Variantes : éventuellement, une propriété n’est vraie que pour une liste de longueur au moins k : On démontre pour k et on démontre qu’elle reste vraie pour les listes plus longues. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
65
Cours d'algorithmique 3 - Intranet
Induction sur les structures I N D U C T I O N S U R L E S A R B R E S 13 novembre 2006 Cours d'algorithmique 3 - Intranet
66
Cours d'algorithmique 3 - Intranet
Induction sur les arbres Induction sur les arbres : On démontre la propriété pour une feuille quelconque. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
67
Cours d'algorithmique 3 - Intranet
Induction sur les arbres Induction sur les arbres : On démontre la propriété pour une feuille quelconque. On suppose la propriété vraie pour les sous-arbres 13 novembre 2006 Cours d'algorithmique 3 - Intranet
68
Cours d'algorithmique 3 - Intranet
Induction sur les arbres Induction sur les arbres : On démontre la propriété pour une feuille quelconque. On suppose la propriété vraie pour les sous-arbres et on démontre qu’elle reste vraie pour l’arbre que l’on obtient en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis). 13 novembre 2006 Cours d'algorithmique 3 - Intranet
69
Cours d'algorithmique 3 - Intranet
Induction sur les arbres Induction sur les arbres : On démontre la propriété pour une feuille quelconque. On suppose la propriété vraie pour les sous-arbres et on démontre qu’elle reste vraie pour l’arbre que l’on obtient en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis). Remarque : Le raisonnement de correction d’une fonction récursive sur arbres, listes, etc, se fait de la même manière : On démontre la correction du cas de base, on suppose les appels récursifs corrects et on démontre la correction de l’appel courant. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
70
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
71
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
72
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } Le cas d’arrêt est trivialement correct ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
73
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } Les appels récursifs sont corrects par hypothèse ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
74
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } Les appels récursifs sont corrects par hypothèse ! La plus grande des profondeurs. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
75
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } Les appels récursifs sont corrects par hypothèse ! La plus grande des profondeurs. La profondeur de notre arbre ! ! ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
76
Cours d'algorithmique 3 - Intranet
Correction d’une fonction récursive La fonction ci-dessous calcule la profondeur d’un arbre ! La profondeur d’un nœud ou d’une feuille dans un arbre correspond au nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question. La profondeur d’un arbre est la profondeur de la feuille la plus profonde. Donc, c'est correct ! ! ! int profond (ptr_arbre arbre) {if ( est_feuille(arbre) ) return( 0 ); else return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); } Les appels récursifs sont corrects par hypothèse ! La plus grande des profondeurs. La profondeur de notre arbre ! ! ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
77
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes d’un arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
78
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes d’un arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : A est une feuille : F ( A ) = 1 = = N ( A ) + 1 ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
79
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes d’un arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : A est une feuille : F ( A ) = 1 = = N ( A ) + 1 ! A est un nœud interne ayant les deux fils B et C : Hypothèse sur B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
80
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes d’un arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : A est une feuille : F ( A ) = 1 = = N ( A ) + 1 ! A est un nœud interne ayant les deux fils B et C : Hypothèse sur B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! Donc, pour A : F ( A ) = F ( B ) + F ( C ) = N ( B ) + N ( C ) 13 novembre 2006 Cours d'algorithmique 3 - Intranet
81
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes d’un arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : A est une feuille : F ( A ) = 1 = = N ( A ) + 1 ! A est un nœud interne ayant les deux fils B et C : Hypothèse sur B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! Donc, pour A : F ( A ) = F ( B ) + F ( C ) = N ( B ) + N ( C ) = N ( A ) ! ! ! N ( A ) 13 novembre 2006 Cours d'algorithmique 3 - Intranet
82
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
83
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. Montrer que, pour une profondeur p fixée, l’arbre A est unique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
84
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. Montrer que, pour une profondeur p fixée, l’arbre A est unique ! Preuve : p = 1 : L’arbre est unique, car les deux fils sont des feuilles ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
85
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. Montrer que, pour une profondeur p fixée, l’arbre A est unique ! Preuve : p = 1 : L’arbre est unique, car les deux fils sont des feuilles ! p > 1 : Le fils droit C doit être de profondeur p-1 et le fils gauche B doit être de profondeur p-2 : 13 novembre 2006 Cours d'algorithmique 3 - Intranet
86
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. Montrer que, pour une profondeur p fixée, l’arbre A est unique ! Preuve : p = 1 : L’arbre est unique, car les deux fils sont des feuilles ! p > 1 : Le fils droit C doit être de profondeur p-1 et le fils gauche B doit être de profondeur p-2 : Hypothèse sur B : B est unique ! Hypothèse sur C : C est unique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
87
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que : soit, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité. Montrer que, pour une profondeur p fixée, l’arbre A est unique ! Preuve : p = 1 : L’arbre est unique, car les deux fils sont des feuilles ! p > 1 : Le fils droit C doit être de profondeur p-1 et le fils gauche B doit être de profondeur p-2 : Hypothèse sur B : B est unique ! Hypothèse sur C : C est unique ! Donc, A sera unique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
88
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Les voici : 13 novembre 2006 Cours d'algorithmique 3 - Intranet
89
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Les voici : 13 novembre 2006 Cours d'algorithmique 3 - Intranet
90
Cours d'algorithmique 3 - Intranet
Preuves par induction sur les arbres Les voici : Le prochain. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
91
Cours d'algorithmique 3 - Intranet
Back-track C h a n g e o n s d e s u j e t ! E x p l o r a t i o n p a r s u c c è s é c h e c B A C K - T R A C K 13 novembre 2006 Cours d'algorithmique 3 - Intranet
92
Cours d'algorithmique 3 - Intranet
Back-track Un exemple archi-classique : Soient des variables v , … , v logiques, 1 n 13 novembre 2006 Cours d'algorithmique 3 - Intranet
93
Cours d'algorithmique 3 - Intranet
Back-track Un exemple archi-classique : Soient des variables v , … , v logiques, soit une formule F construite à partir de ces variables et des connectives et , ou et not , 1 n 13 novembre 2006 Cours d'algorithmique 3 - Intranet
94
Cours d'algorithmique 3 - Intranet
Back-track Un exemple archi-classique : Soient des variables v , … , v logiques, soit une formule F construite à partir de ces variables et des connectives et , ou et not , trouver un n-uplet de valeurs pour les v de façon à rendre vraie la formule F . 1 n i 13 novembre 2006 Cours d'algorithmique 3 - Intranet
95
Cours d'algorithmique 3 - Intranet
Back-track Un exemple archi-classique : Soient des variables v , … , v logiques, soit une formule F construite à partir de ces variables et des connectives et , ou et not , trouver un n-uplet de valeurs pour les v de façon à rendre vraie la formule F . Solution : Nous construisons la table de vérité ! C’est simple ! ! ! Mais, c’est très coûteux ! Jusqu’à 2 cas à inspecter ! ! ! Pouvons-nous faire mieux ? Probablement non ! ! ! 1 n i n 13 novembre 2006 Cours d'algorithmique 3 - Intranet
96
Cours d'algorithmique 3 - Intranet
Back-track F = x et not(y) et z x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
97
Cours d'algorithmique 3 - Intranet
Back-track F = x et not(y) et z x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
98
Cours d'algorithmique 3 - Intranet
Back-track F = x et not(y) et z x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
99
Cours d'algorithmique 3 - Intranet
Back-track F = x et not(y) et z x y z F Au pire, nous parcourons tout le tableau avant de constater qu’il n’y a aucune solution. Parfois, nous avons une idée où chercher la solution, mais ce n’est pas toujours le cas. Nous pouvons nous arrêter ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
100
Cours d'algorithmique 3 - Intranet
Back-track La même table horizontalement. x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
101
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
102
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? Faux Vrai x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
103
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? Faux Vrai D’abord et toujours ! Ensuite, si besoin est ! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
104
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? Faux Vrai Sous-arbre en attente! Choix concernant y ! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
105
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? Faux Vrai Quelle valeur pour y ? Faux Vrai Sous-arbres en attente! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
106
Cours d'algorithmique 3 - Intranet
Back-track Quelle valeur pour x ? Faux Vrai Quelle valeur pour y ? Faux Vrai Quelle valeur pour z ? Sous-arbres en attente! Faux Vrai x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
107
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
108
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! x y z F Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
109
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! L'alternative ! x y z F Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
110
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! Exploré sans succès ! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
111
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! Exploré sans succès ! x y z F Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
112
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Sous-arbres en attente! Exploré sans succès ! L'alternative ! x y z F Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
113
Cours d'algorithmique 3 - Intranet
Back-track Explorés sans succès ! Chemin actuel. Sous-arbres en attente! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
114
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Explorés sans succès ! Un peu plus tard … Sous-arbre en attente! x y z F 13 novembre 2006 Cours d'algorithmique 3 - Intranet
115
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Explorés sans succès ! Sous-arbre en attente! x y z F Succès ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
116
Cours d'algorithmique 3 - Intranet
Back-track Chemin actuel. Explorés sans succès ! Sous-arbre en attente! Abandonné x y z F Succès ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
117
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Chemin actuel. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
118
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Chemin actuel. Sous-arbres explorés sans succès. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
119
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Chemin actuel. Sous-arbres en attente de traitement. Sous-arbres explorés sans succès. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
120
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Dynamique : Chemin actuel. Sous-arbres en attente de traitement. Sous-arbres explorés sans succès. Succès ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
121
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Dynamique : Chemin actuel. Sous-arbres en attente de traitement. Nous abandonnons les points de back-track ! Sous-arbres explorés sans succès. Succès ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
122
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Dynamique : Chemin actuel. Sous-arbres en attente de traitement. Sous-arbres explorés sans succès. Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
123
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track Dynamique : Chemin actuel. Sous-arbres en attente de traitement. Dernière alternative ! ! ! Sous-arbres explorés sans succès. Echec ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
124
On dit que l'on back-track !
Situation générale du Back-track Dynamique : Chemin actuel. Sous-arbres en attente de traitement. Dernière alternative ! ! ! Sous-arbres explorés sans succès. Echec ! On dit que l'on back-track ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
125
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track, échec final Dynamique : Chemin actuel. Sous-arbres explorés sans succès. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
126
Cours d'algorithmique 3 - Intranet
Situation générale du Back-track, échec final Dynamique : Chemin actuel. Echec ! Sous-arbres explorés sans succès. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
127
Plus de point de back-track :
Situation générale du Back-track, échec final Dynamique : Chemin actuel. Echec ! Sous-arbres explorés sans succès. Plus de point de back-track : l'échec est définitif ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
128
Cours d'algorithmique 3 - Intranet
Back-track, code générique L E C O D E D U B A C K - T R A C K 13 novembre 2006 Cours d'algorithmique 3 - Intranet
129
Cours d'algorithmique 3 - Intranet
Back-track, code générique int back_track (un_type situation) { ... } Pour simplifier nous supposons rendre un booléen, mais le résultat pourrait, par exemple, être le n-uplet solution, etc … 13 novembre 2006 Cours d'algorithmique 3 - Intranet
130
Cours d'algorithmique 3 - Intranet
Back-track, code générique int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else ... } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
131
Cours d'algorithmique 3 - Intranet
Back-track, code générique int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else {dabord = back_track( premiere_alternative(situation) ); ... } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
132
Cours d'algorithmique 3 - Intranet
Back-track, code générique int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else {dabord = back_track( premiere_alternative(situation) ); if ( suffisant(dabord) ) return( dabord ); /* les points de back-track sont abandonnés */ ... } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
133
Cours d'algorithmique 3 - Intranet
Back-track, code générique int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else {dabord = back_track( premiere_alternative(situation) ); if ( suffisant(dabord) ) return( dabord ); /* les points de back-track sont abandonnés */ return( seconde_alternative(situation) ); } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
134
Back-track, code générique -----------------------------------------------------------------
int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else {dabord = back_track( premiere_alternative(situation) ); if ( suffisant(dabord) ) return( dabord ); /* les points de back-track sont abandonnés */ return( seconde_alternative(situation) ); } Comme pour Fibonnacci, nous parcourons un arbre imaginaire, qui ne sera jamais construit en tant que tel ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
135
Cours d'algorithmique 3 - Intranet
Back-track, toutes les solutions Un échec est un ensemble vide de succès. Nous explorons toutes les alternatives. Nous construisons l’union de toutes les solutions. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
136
Cours d'algorithmique 3 - Intranet
Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) { ... } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
137
Cours d'algorithmique 3 - Intranet
Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) {if ( decidable(situation) ) ... else } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
138
Cours d'algorithmique 3 - Intranet
Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) {if ( decidable(situation) ) if ( est_satisfaisant(situation) ) return( { situation } ); else return( {} ); ... } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
139
Cours d'algorithmique 3 - Intranet
Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) {if ( decidable(situation) ) if ( est_satisfaisant(situation) ) return( { situation } ); else return( {} ); return( back_track_toutes(premiere_alternative(situation)) union back_track_toutes(seconde_alternative(situation)) ); } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
140
Cours d'algorithmique 3 - Intranet
Minimax C h a n g e o n s d e s u j e t ! A r b r e s d e j e u x M I N I M A X 13 novembre 2006 Cours d'algorithmique 3 - Intranet
141
Cours d'algorithmique 3 - Intranet
Minimax Considérons un arbre dont : les feuilles valent Vrai ou Faux et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives et et ou. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
142
Cours d'algorithmique 3 - Intranet
Minimax Considérons un arbre dont : les feuilles valent Vrai ou Faux et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives et et ou. Par réduction nous calculons une valeur pour la racine : et V ou et F et F V V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
143
Cours d'algorithmique 3 - Intranet
Minimax Considérons un arbre dont : les feuilles valent Vrai ou Faux et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives et et ou. Par réduction nous calculons une valeur pour la racine : et V ou F V et F et F V V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
144
Cours d'algorithmique 3 - Intranet
Minimax Considérons un arbre dont : les feuilles valent Vrai ou Faux et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives et et ou. Par réduction nous calculons une valeur pour la racine : et V V ou F V et F et F V V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
145
Cours d'algorithmique 3 - Intranet
Minimax Considérons un arbre dont : les feuilles valent Vrai ou Faux et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives et et ou. Par réduction nous calculons une valeur pour la racine : V et V V ou F V et F et F V V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
146
Cours d'algorithmique 3 - Intranet
Minimax Nous n’avons pas toujours besoin de parcourir tout l’arbre. V et V V ou V F et F et F V V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
147
Cours d'algorithmique 3 - Intranet
Minimax Nous n’avons pas toujours besoin de parcourir tout l’arbre. V et V V ou V et ??? ??? V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
148
Ces sous-arbres n’ont aucune incidence sur le résultat ! ! !
Minimax Nous n’avons pas toujours besoin de parcourir tout l’arbre. V et V V ou V et ??? ??? Ces sous-arbres n’ont aucune incidence sur le résultat ! ! ! V V 13 novembre 2006 Cours d'algorithmique 3 - Intranet
149
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le et : et et V ? F ? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
150
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le et : et et ? F donne donne V ? F ? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
151
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le et : et et ? F donne donne V ? F ? Règles pour le ou : ou ou V ? F ? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
152
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le et : et et ? F donne donne V ? F ? Règles pour le ou : ou ou V ? donne donne V ? F ? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
153
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le et : et et ? F donne donne V ? F ? Règles pour le ou : ou ou V ? donne donne V ? F ? On dit que l’on fait des coupes dans l’arbre. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
154
Cours d'algorithmique 3 - Intranet
Minimax On peut faire la substitution suivante, sans rien changer aux comportements : V devient 1 F devient 0 et devient min ou devient max Les deux formulations sont isomorphes ! ! ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
155
Cours d'algorithmique 3 - Intranet
Minimax Règles pour le min : min min ? donne donne 1 ? ? Règles pour le max : max max 1 ? donne donne 1 ? ? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
156
Cours d'algorithmique 3 - Intranet
Minimax Définition générale d’un arbre Minimax : les feuilles ont des valeurs entières (ou réelles) et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives max et min. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
157
Cours d'algorithmique 3 - Intranet
Minimax Définition générale d’un arbre Minimax : les feuilles ont des valeurs entières (ou réelles) et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives max et min. La valeur Minimax d’un arbre A vaut : si A est une feuille, alors la valeur de cette feuille, 13 novembre 2006 Cours d'algorithmique 3 - Intranet
158
Cours d'algorithmique 3 - Intranet
Minimax Définition générale d’un arbre Minimax : les feuilles ont des valeurs entières (ou réelles) et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives max et min. La valeur Minimax d’un arbre A vaut : si A est une feuille, alors la valeur de cette feuille, si A est un nœud interne de type max ayant des fils B et C, alors le maximum des valeurs minimax de B et C, 13 novembre 2006 Cours d'algorithmique 3 - Intranet
159
Cours d'algorithmique 3 - Intranet
Minimax Définition générale d’un arbre Minimax : les feuilles ont des valeurs entières (ou réelles) et les nœuds internes portent alternativement (depuis la racine vers les feuilles) les connectives max et min. La valeur Minimax d’un arbre A vaut : si A est une feuille, alors la valeur de cette feuille, si A est un nœud interne de type max ayant des fils B et C, alors le maximum des valeurs minimax de B et C, si A est un nœud interne de type min ayant des fils B et C, alors le minimum des valeurs minimax de B et C. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
160
Cours d'algorithmique 3 - Intranet
Minimax int mini_max (un_type situation , int max_ou_pas ) {if ( feuille(situation) ) return( valeur(situation) ); else if ( max_ou_pas ) return( max( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) , minimax( genere_fils_droit(situation) , not(max_ou_pas) ) ) ) ; return( min( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) ) ) ; } 13 novembre 2006 Cours d'algorithmique 3 - Intranet
161
Cours d'algorithmique 3 - Intranet
Minimax int mini_max (un_type situation , int max_ou_pas ) {if ( feuille(situation) ) return( valeur(situation) ); else if ( max_ou_pas ) return( max( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) , minimax( genere_fils_droit(situation) , not(max_ou_pas) ) ) ) ; return( min( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) ) ) ; } Le cas d’arrêt est trivial ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
162
Cours d'algorithmique 3 - Intranet
Minimax int mini_max (un_type situation , int max_ou_pas ) {if ( feuille(situation) ) return( valeur(situation) ); else if ( max_ou_pas ) return( max( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) , minimax( genere_fils_droit(situation) , not(max_ou_pas) ) ) ) ; return( min( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) ) ) ; } C’est assez logique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
163
Cours d'algorithmique 3 - Intranet
Minimax int mini_max (un_type situation , int max_ou_pas ) {if ( feuille(situation) ) return( valeur(situation) ); else if ( max_ou_pas ) return( max( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) , minimax( genere_fils_droit(situation) , not(max_ou_pas) ) ) ) ; return( min( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) ) ) ; } C’est assez logique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
164
Cours d'algorithmique 3 - Intranet
Minimax int mini_max (un_type situation , int max_ou_pas ) {if ( feuille(situation) ) return( valeur(situation) ); else if ( max_ou_pas ) return( max( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) , minimax( genere_fils_droit(situation) , not(max_ou_pas) ) ) ) ; return( min( minimax( genere_fils_gauche(situation) , not(max_ou_pas) ) ) ) ; } C’est assez logique ! Cas symétrique ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
165
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! max min min 5 3 7 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
166
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! 3 max 3 1 min min 5 3 7 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
167
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! 3 Donc, MAX joue son meilleur choix. max 3 1 min min 5 3 7 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
168
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! 3 Donc, MAX joue son meilleur choix. max 3 1 min min Et MIN joue sa meilleure réplique. 5 3 7 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
169
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! Ce choix pourrait être tentant pour MAX qui espère obtenir 7 ! max min min 5 3 7 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
170
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! Ce choix pourrait être tentant pour MAX qui espère obtenir 7 ! max min min 5 3 7 MIN est très fort et ne concède que le minimum ! 1 13 novembre 2006 Cours d'algorithmique 3 - Intranet
171
Cours d'algorithmique 3 - Intranet
Minimax Les arbres Minimax servent dans les jeux : Je suis MAX et je veux maximiser mon bénéfice ! Mon adversaire est MIN et veut minimiser mon bénéfice ! 3 max 3 1 min min 5 3 7 1 Le chemin du minimax correspond à la fois à : - la meilleure attaque de MAX - et à la meilleure riposte de MIN. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
172
Cours d'algorithmique 3 - Intranet
Minimax Pourquoi construire un arbre minimax plutôt que d’évaluer tout de suite une position ? Les fonctions d’évaluation sont peu précises ! Minimax stabilise les résultats ! 4?? 13 novembre 2006 Cours d'algorithmique 3 - Intranet
173
Cours d'algorithmique 3 - Intranet
Minimax Pourquoi construire un arbre minimax plutôt que d’évaluer tout de suite une position ? Les fonctions d’évaluation sont peu précises ! Minimax stabilise les résultats ! 3 max 3 1 min min 5 3 7 1 - A gauche, assez stable entre 3 et 5. - A droite, beaucoup plus instable. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
174
Cours d'algorithmique 3 - Intranet
Minimax Minimax s’applique aux jeux : de somme nulle, déterministes, et d’information parfaite. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
175
Cours d'algorithmique 3 - Intranet
Minimax Minimax s’applique aux jeux : de somme nulle, déterministes, et d’information parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
176
Cours d'algorithmique 3 - Intranet
Minimax Minimax s’applique aux jeux : de somme nulle, déterministes, et d’information parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas d’élément de chance comme le résultat d’un lancer de dé. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
177
Cours d'algorithmique 3 - Intranet
Minimax Minimax s’applique aux jeux : de somme nulle, déterministes, et d’information parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas d’élément de chance comme le résultat d’un lancer de dé. Tous voient toute l’information, contrairement aux jeux de cartes où la main est cachée. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
178
Cours d'algorithmique 3 - Intranet
Minimax Minimax s’applique aux jeux : de somme nulle, déterministes, et d’information parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas d’élément de chance pour le résultat d’un lancer de dé. Tous voient toute l’information, contrairement aux jeux de carte où la main est cachée. Exemples : les échecs, les dames, le go, … 13 novembre 2006 Cours d'algorithmique 3 - Intranet
179
Cours d'algorithmique 3 - Intranet
Synthèse Parcours d’arbres. Modification d’arbres. Induction sur la structure. Back-Track. Minimax. 13 novembre 2006 Cours d'algorithmique 3 - Intranet
180
Cours d'algorithmique 3 - Intranet
m E r C i e T b O n N e J o U r N é E ! ! ! n ‘ O u B l I e Z p A s D e p R é P a R e R v O s T D ! ! ! 13 novembre 2006 Cours d'algorithmique 3 - Intranet
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.