La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours d’Algorithmique

Présentations similaires


Présentation au sujet: "Cours d’Algorithmique"— Transcription de la présentation:

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


Télécharger ppt "Cours d’Algorithmique"

Présentations similaires


Annonces Google