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 3 - Intranet 1 13 novembre 2006 Cours dAlgorithmique Parcours darbres. Induction sur la structure. Back-track.Minimax.

Présentations similaires


Présentation au sujet: "Cours d'algorithmique 3 - Intranet 1 13 novembre 2006 Cours dAlgorithmique Parcours darbres. Induction sur la structure. Back-track.Minimax."— Transcription de la présentation:

1 Cours d'algorithmique 3 - Intranet 1 13 novembre 2006 Cours dAlgorithmique Parcours darbres. Induction sur la structure. Back-track.Minimax.

2 13 novembre 2006Cours d'algorithmique 3 - Intranet2 Trier et chercher Trier et chercher Listes et arbres Listes et arbres Le back-track Le back-track Arbres équilibrés Arbres équilibrés Récursivité et induction sur la structure Récursivité et induction sur la structure Divide and conquer Divide and conquer Minimax Minimax Dérécursion Dérécursion NP-complétude NP-complétude Logique de Hoare Logique de Hoare Programmation dynamique Programmation dynamique Complexité et calculabilité Complexité et calculabilité Les grandes lignes du cours

3 13 novembre 2006Cours d'algorithmique 3 - Intranet3 Fibonnacci et les arbres int fibonnacci (int n) {if ( n == 0 ) return(0); else if ( n == 1 ) return(1); else return( fibonnacci(n-1) + fibonnacci(n-2) ); } Fibonnacci est une fonction qui comporte deux appels récursifs. Tout appel construit donc deux autres appels. Construisons cet arbre.

4 13 novembre 2006Cours d'algorithmique 3 - Intranet4 Fibonnacci et les arbres int fibonnacci (int n) {if ( n == 0 ) return(0); else if ( n == 1 ) return(1); else return( fibonnacci(n-1) + fibonnacci(n-2) ); } Fibonnacci est une fonction qui comporte deux appels récursifs. Tout appel construit donc deux autres appels. Construisons cet arbre. Les cas darrêt. Les appels récursifs.

5 13 novembre 2006Cours d'algorithmique 3 - Intranet5 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) ); else return( cree_noeud( arbre_fibo(n-1), arbre_fibo(n-2) ) ) ; }

6 13 novembre 2006Cours d'algorithmique 3 - Intranet6 Fibonnacci et les arbres arbre_fibo(5)

7 13 novembre 2006Cours d'algorithmique 3 - Intranet7 Fibonnacci et les arbres arbre_fibo(5) On observe que de nombreux calculs sont répétés !

8 13 novembre 2006Cours d'algorithmique 3 - Intranet8 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)) ) ; }

9 13 novembre 2006Cours d'algorithmique 3 - Intranet9 Calcul de la somme des feuilles arbre_fibo(5) 10 1

10 13 novembre 2006Cours d'algorithmique 3 - Intranet10 Calcul de la somme des feuilles arbre_fibo(5)

11 13 novembre 2006Cours d'algorithmique 3 - Intranet11 Calcul de la somme des feuilles arbre_fibo(5)

12 13 novembre 2006Cours d'algorithmique 3 - Intranet12 Calcul de la somme des feuilles somme_arbre_fibo(5) =

13 13 novembre 2006Cours d'algorithmique 3 - Intranet13 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)) ) ; }

14 13 novembre 2006Cours d'algorithmique 3 - Intranet14 Calcul de la somme des feuilles arbre_fibo(5) 1 accumule = 0

15 13 novembre 2006Cours d'algorithmique 3 - Intranet15 Calcul de la somme des feuilles arbre_fibo(5) 1 accumule = 0 1

16 13 novembre 2006Cours d'algorithmique 3 - Intranet16 Calcul de la somme des feuilles arbre_fibo(5) 1 accumule = 0 1 2

17 13 novembre 2006Cours d'algorithmique 3 - Intranet17 somme_arbre_fibo(5) = 5 Calcul de la somme des feuilles accumule = accumule = 5

18 13 novembre 2006Cours d'algorithmique 3 - Intranet18 L E S T Y P E S D E P A R C O U R S Types de parcours

19 13 novembre 2006Cours d'algorithmique 3 - Intranet19 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... );

20 13 novembre 2006Cours d'algorithmique 3 - Intranet20 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... );

21 13 novembre 2006Cours d'algorithmique 3 - Intranet21 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... );

22 13 novembre 2006Cours d'algorithmique 3 - Intranet22 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... );

23 13 novembre 2006Cours d'algorithmique 3 - Intranet23 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... );

24 13 novembre 2006Cours d'algorithmique 3 - Intranet24 Types de parcours Parcours préfixe res_fg = appel ( fg(a) ); res_fd = appel ( fd(a) ); return(... res_fg... res_fd... ); Ou encore :... appel ( fg(a) ) / appel ( fd(a) )...

25 13 novembre 2006Cours d'algorithmique 3 - Intranet25 Types de parcours Parcours suffixe ou postfixe res_fg = appel ( fd(a) ); res_fd = appel ( fg(a) ); return(... res_fg... res_fd... );

26 13 novembre 2006Cours d'algorithmique 3 - Intranet26 Types de parcours Parcours suffixe ou postfixe res_fg = appel ( fd(a) ); res_fd = appel ( fg(a) ); return(... res_fg... res_fd... ); Ou encore :... appel ( fd(a) ) / appel ( fg(a) )...

27 13 novembre 2006Cours d'algorithmique 3 - Intranet27 Types de parcours Parcours avec opérateur commutatif : lordre 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.

28 13 novembre 2006Cours d'algorithmique 3 - Intranet28 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! *

29 13 novembre 2006Cours d'algorithmique 3 - Intranet29 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

30 13 novembre 2006Cours d'algorithmique 3 - Intranet30 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

31 13 novembre 2006Cours d'algorithmique 3 - Intranet31 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

32 13 novembre 2006Cours d'algorithmique 3 - Intranet32 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

33 13 novembre 2006Cours d'algorithmique 3 - Intranet33 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

34 13 novembre 2006Cours d'algorithmique 3 - Intranet34 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * *

35 13 novembre 2006Cours d'algorithmique 3 - Intranet35 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * *

36 13 novembre 2006Cours d'algorithmique 3 - Intranet36 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * *

37 13 novembre 2006Cours d'algorithmique 3 - Intranet37 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * *

38 13 novembre 2006Cours d'algorithmique 3 - Intranet38 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * *

39 13 novembre 2006Cours d'algorithmique 3 - Intranet39 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * Impression infixe parenthésée : Impression infixe parenthésée : ( ( ) * 3 ) * () )(

40 13 novembre 2006Cours d'algorithmique 3 - Intranet40 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * Impression infixe parenthésée : Impression infixe parenthésée : ( ( ) * 3 ) *

41 13 novembre 2006Cours d'algorithmique 3 - Intranet41 Types de parcours avec étiquettes Traitement de létiquette, soit avant, soit après, soit pendant ! Impression préfixe de larbre : Impression préfixe de larbre : * Impression postfixe de larbre : Impression postfixe de larbre : * Impression infixe parenthésée : Impression infixe parenthésée : ( ( ) * 3 ) *

42 13 novembre 2006Cours d'algorithmique 3 - Intranet42 M O D I F I C A T I O N D U N A R B R E Types de parcours

43 13 novembre 2006Cours d'algorithmique 3 - Intranet43 Modification dun arbre Nous savons créer un arbre, nous savons parcourir un arbre ! Nous savons créer un arbre, nous savons parcourir un arbre ! Pouvons-nous modifier un arbre ? Pouvons-nous modifier un arbre ? OUI OUI – soit, en le reconstruisant, – soit, en le modifiant physiquement. physiquement.

44 13 novembre 2006Cours d'algorithmique 3 - Intranet44 Modification dun arbre Nous savons créer un arbre, nous savons parcourir un arbre ! Nous savons créer un arbre, nous savons parcourir un arbre ! Pouvons-nous modifier un arbre ? Pouvons-nous modifier un arbre ? OUI OUI – soit, en le reconstruisant, – soit, en le modifiant physiquement. physiquement Remplacer pardans 46

45 13 novembre 2006Cours d'algorithmique 3 - Intranet45 Modification dun arbre En reconstruisant : En reconstruisant : Partie qui doit être reconstruite.

46 13 novembre 2006Cours d'algorithmique 3 - Intranet46 Modification dun arbre En reconstruisant : En reconstruisant : Partie qui doit être reconstruite. cree_noeud( fg(arbre), cree_noeud( fg(fd(arbre)), cree_noeud( fg(fd(arbre)), cree_noeud( cree_noeud(cree_feuille(4), cree_noeud( cree_noeud(cree_feuille(4), cree_feuille(6)), cree_feuille(6)), fd(fd(fd(arbre))) ) ) ) ; fd(fd(fd(arbre))) ) ) ) ;

47 13 novembre 2006Cours d'algorithmique 3 - Intranet47 Modification dun arbre En reconstruisant : En reconstruisant : Partie qui doit être reconstruite. cree_noeud( fg(arbre), cree_noeud( fg(fd(arbre)), cree_noeud( fg(fd(arbre)), cree_noeud( cree_noeud(cree_feuille(4), cree_noeud( cree_noeud(cree_feuille(4), cree_feuille(6)), cree_feuille(6)), fd(fd(fd(arbre))) ) ) ) ; fd(fd(fd(arbre))) ) ) ) ;

48 13 novembre 2006Cours d'algorithmique 3 - Intranet48 Modification dun arbre En modifiant : En modifiant : Pointeur qui est modifié.

49 13 novembre 2006Cours d'algorithmique 3 - Intranet49 Modification dun arbre En modifiant : En modifiant : Pointeur qui est modifié. modifie_fg_noeud( fd(fd(arbre)), cree_noeud( cree_feuille(4), cree_noeud( cree_feuille(4), cree_feuille(6) ) ) ; cree_feuille(6) ) ) ;

50 13 novembre 2006Cours d'algorithmique 3 - Intranet50 Modification dun arbre Attention aux partages de structure avec modifications physiques ! avec modifications physiques ! sous_arbre = cree_noeud( cree_feuille(3), cree_feuille(5) ); arbre = cree_noeud( sous_arbre, sous_arbre ); 3 5 Représentation physique !

51 13 novembre 2006Cours d'algorithmique 3 - Intranet51 Modification dun arbre Attention aux partages de structure avec modifications physiques ! avec modifications physiques ! 3 5 sous_arbre = cree_noeud( cree_feuille(3), cree_feuille(5) ); arbre = cree_noeud( sous_arbre, sous_arbre ); 3 5 Représentation physique ! 3 5 Larbre logique ! ! !

52 13 novembre 2006Cours d'algorithmique 3 - Intranet52 Modification dun arbre Attention aux partages de structure avec modifications physiques ! avec modifications physiques ! 3 5 sous_arbre = cree_noeud( cree_feuille(3), cree_feuille(5) ); arbre = cree_noeud( sous_arbre, sous_arbre ); 9 5 Représentation physique ! 9 5 Larbre logique ! ! ! Reconstructiondarbre. Modificationphysique.

53 13 novembre 2006Cours d'algorithmique 3 - Intranet53 Modification dun arbre Attention aux partages de structure avec modifications physiques ! avec modifications physiques ! 3 5 sous_arbre = cree_noeud( cree_feuille(3), cree_feuille(5) ); arbre = cree_noeud( sous_arbre, sous_arbre ); 9 5 Représentation physique ! 9 5 Larbre logique ! ! ! Reconstructiondarbre. Modificationphysique.

54 13 novembre 2006Cours d'algorithmique 3 - Intranet54 Modification dun arbre Attention aux partages de structure avec modifications physiques ! avec modifications physiques ! 3 5 sous_arbre = cree_noeud( cree_feuille(3), cree_feuille(5) ); arbre = cree_noeud( sous_arbre, sous_arbre ); 9 5 Représentation physique ! 9 5 Larbre logique ! ! ! Reconstructiondarbre. Modificationphysique.

55 13 novembre 2006Cours d'algorithmique 3 - Intranet55 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 Induction sur les structures

56 13 novembre 2006Cours d'algorithmique 3 - Intranet56 Induction sur les structures Induction simple sur les entiers naturels : Induction simple sur les entiers naturels : – On démontre la propriété pour 0, le premier entier naturel.

57 13 novembre 2006Cours d'algorithmique 3 - Intranet57 Induction sur les structures Induction simple sur les entiers naturels : 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. Cest le pas dinduction !

58 13 novembre 2006Cours d'algorithmique 3 - Intranet58 Induction sur les structures Induction simple sur les entiers naturels : 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. Cest le pas dinduction ! – Donc, elle est vraie pour tout entier naturel.

59 13 novembre 2006Cours d'algorithmique 3 - Intranet59 Induction sur les structures Induction simple sur les entiers naturels : 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. Cest le pas dinduction ! – Donc, elle est vraie pour tout entier naturel. Induction totale sur les entiers naturels : Induction totale 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 tous les entiers de 0 à i. Cest le pas dinduction ! – Donc, elle est vraie pour tout entier naturel.

60 13 novembre 2006Cours d'algorithmique 3 - Intranet60 I N D U C T I O N S U R L E S L I S T E S Induction sur les structures

61 13 novembre 2006Cours d'algorithmique 3 - Intranet61 Induction sur les listes 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 !).

62 13 novembre 2006Cours d'algorithmique 3 - Intranet62 Induction sur les listes 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

63 13 novembre 2006Cours d'algorithmique 3 - Intranet63 Induction sur les listes 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 quelle reste vraie pour la liste de longueur i+1 que lon obtient en ajoutant un élément (bien choisi) en tête de liste.

64 13 novembre 2006Cours d'algorithmique 3 - Intranet64 Induction sur les listes 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 quelle reste vraie pour la liste de longueur i+1 que lon obtient en ajoutant un élément (bien choisi) en tête de liste. – Variantes : éventuellement, une propriété nest vraie que pour une liste de longueur au moins k : On démontre pour k On démontre pour k et on démontre quelle reste vraie pour les listes plus longues. et on démontre quelle reste vraie pour les listes plus longues.

65 13 novembre 2006Cours d'algorithmique 3 - Intranet65 I N D U C T I O N S U R L E S A R B R E S Induction sur les structures

66 13 novembre 2006Cours d'algorithmique 3 - Intranet66 Induction sur les arbres Induction sur les arbres : Induction sur les arbres : – On démontre la propriété pour une feuille quelconque.

67 13 novembre 2006Cours d'algorithmique 3 - Intranet67 Induction sur les arbres 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

68 13 novembre 2006Cours d'algorithmique 3 - Intranet68 Induction sur les arbres 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 quelle reste vraie pour larbre que lon obtient en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis).

69 13 novembre 2006Cours d'algorithmique 3 - Intranet69 Induction sur les arbres 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 quelle reste vraie pour larbre que lon obtient en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis). – Remarque : Le raisonnement de correction dune fonction récursive sur arbres, listes, etc, se fait de la même manière : Le raisonnement de correction dune 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 lappel courant.

70 13 novembre 2006Cours d'algorithmique 3 - Intranet70 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun arbre est la profondeur de la feuille la plus profonde.

71 13 novembre 2006Cours d'algorithmique 3 - Intranet71 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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)) )); }

72 13 novembre 2006Cours d'algorithmique 3 - Intranet72 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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 darrêt est trivialement correct !

73 13 novembre 2006Cours d'algorithmique 3 - Intranet73 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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 !

74 13 novembre 2006Cours d'algorithmique 3 - Intranet74 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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.

75 13 novembre 2006Cours d'algorithmique 3 - Intranet75 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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 ! ! !

76 13 novembre 2006Cours d'algorithmique 3 - Intranet76 Correction dune fonction récursive La fonction ci-dessous calcule la profondeur dun arbre ! La fonction ci-dessous calcule la profondeur dun arbre ! – La profondeur dun nœud ou dune feuille dans un arbre correspond au nombre de fois où lon doit « descendre » vers un fils avant datteindre le nœud ou la feuille en question. – La profondeur dun 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 ! ! !

77 13 novembre 2006Cours d'algorithmique 3 - Intranet77 Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Si A est binaire, alors : F ( A ) = N ( A ) + 1

78 13 novembre 2006Cours d'algorithmique 3 - Intranet78 Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : Preuve : – A est une feuille : F ( A ) = 1 = = N ( A ) + 1 !

79 13 novembre 2006Cours d'algorithmique 3 - Intranet79 Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : 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 B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 !

80 13 novembre 2006Cours d'algorithmique 3 - Intranet80 Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : 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 B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 1 ! – Donc, pour A : F ( A ) = F ( B ) + F ( C ) = N ( B ) + N ( C )

81 13 novembre 2006Cours d'algorithmique 3 - Intranet81 Preuves par induction sur les arbres Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Soient F ( A ) le nombre de feuilles et N ( A ) le nombre de nœuds internes dun arbre A. Si A est binaire, alors : F ( A ) = N ( A ) + 1 Si A est binaire, alors : F ( A ) = N ( A ) + 1 Preuve : 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 B : F ( B ) = N ( B ) + 1 ! Hypothèse sur C : F ( C ) = N ( C ) + 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 ) + 1 ! ! ! = N ( A ) + 1 ! ! ! N ( A )

82 13 novembre 2006Cours d'algorithmique 3 - Intranet82 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité.

83 13 novembre 2006Cours d'algorithmique 3 - Intranet83 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. Montrer que, pour une profondeur p fixée, larbre A est unique ! Montrer que, pour une profondeur p fixée, larbre A est unique !

84 13 novembre 2006Cours d'algorithmique 3 - Intranet84 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. Montrer que, pour une profondeur p fixée, larbre A est unique ! Montrer que, pour une profondeur p fixée, larbre A est unique ! Preuve : Preuve : – p = 1 : Larbre est unique, car les deux fils sont des feuilles !

85 13 novembre 2006Cours d'algorithmique 3 - Intranet85 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. Montrer que, pour une profondeur p fixée, larbre A est unique ! Montrer que, pour une profondeur p fixée, larbre A est unique ! Preuve : Preuve : – p = 1 : Larbre 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 : gauche B doit être de profondeur p-2 :

86 13 novembre 2006Cours d'algorithmique 3 - Intranet86 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. Montrer que, pour une profondeur p fixée, larbre A est unique ! Montrer que, pour une profondeur p fixée, larbre A est unique ! Preuve : Preuve : – p = 1 : Larbre 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 : gauche B doit être de profondeur p-2 : Hypothèse sur B : B est unique ! Hypothèse sur B : B est unique ! Hypothèse sur C : C est unique ! Hypothèse sur C : C est unique !

87 13 novembre 2006Cours d'algorithmique 3 - Intranet87 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 : 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, les deux sous-arbres sont de profondeur 0, soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. soit, la profondeur du fils droit dépasse la profondeur du fils gauche dune unité. Montrer que, pour une profondeur p fixée, larbre A est unique ! Montrer que, pour une profondeur p fixée, larbre A est unique ! Preuve : Preuve : – p = 1 : Larbre 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 : gauche B doit être de profondeur p-2 : Hypothèse sur B : B est unique ! Hypothèse sur B : B est unique ! Hypothèse sur C : C est unique ! Hypothèse sur C : C est unique ! Donc, A sera unique ! Donc, A sera unique !

88 13 novembre 2006Cours d'algorithmique 3 - Intranet88 Preuves par induction sur les arbres Les voici :

89 13 novembre 2006Cours d'algorithmique 3 - Intranet89 Preuves par induction sur les arbres Les voici :

90 13 novembre 2006Cours d'algorithmique 3 - Intranet90 Preuves par induction sur les arbres Les voici : Le prochain.

91 13 novembre 2006Cours d'algorithmique 3 - Intranet91 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

92 13 novembre 2006Cours d'algorithmique 3 - Intranet92 Back-track Un exemple archi-classique : Un exemple archi-classique : – Soient des variables v, …, v logiques, 1 n

93 13 novembre 2006Cours d'algorithmique 3 - Intranet93 Back-track Un exemple archi-classique : 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

94 13 novembre 2006Cours d'algorithmique 3 - Intranet94 Back-track Un exemple archi-classique : 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

95 13 novembre 2006Cours d'algorithmique 3 - Intranet95 Back-track Un exemple archi-classique : 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 : Solution : – Nous construisons la table de vérité ! Cest simple ! ! ! – Mais, cest très coûteux ! Jusquà 2 cas à inspecter ! ! ! – Pouvons-nous faire mieux ? Probablement non ! ! ! 1 n i n

96 13 novembre 2006Cours d'algorithmique 3 - Intranet96 Back-track F = x et not( y) et z F = x et not( y) et z x y z F

97 13 novembre 2006Cours d'algorithmique 3 - Intranet97 Back-track F = x et not( y) et z F = x et not( y) et z x y z F

98 13 novembre 2006Cours d'algorithmique 3 - Intranet98 Back-track F = x et not( y) et z F = x et not( y) et z x y z F

99 13 novembre 2006Cours d'algorithmique 3 - Intranet99 Back-track F = x et not( y) et z F = x et not( y) et z x y z F Au pire, nous parcourons tout le tableau avant de constater quil ny a aucune solution. Au pire, nous parcourons tout le tableau avant de constater quil ny a aucune solution. Parfois, nous avons une idée où chercher la solution, mais ce nest pas toujours le cas. Parfois, nous avons une idée où chercher la solution, mais ce nest pas toujours le cas. Nous pouvons nous arrêter !

100 13 novembre 2006Cours d'algorithmique 3 - Intranet100 Back-track x y z F La même table horizontalement.

101 13 novembre 2006Cours d'algorithmique 3 - Intranet101 Back-track x y z F Quelle valeur pour x ?

102 13 novembre 2006Cours d'algorithmique 3 - Intranet102 Back-track x y z F Quelle valeur pour x ? Faux Vrai

103 13 novembre 2006Cours d'algorithmique 3 - Intranet103 Back-track x y z F Quelle valeur pour x ? Faux Vrai Dabord et toujours ! Ensuite, si besoin est !

104 13 novembre 2006Cours d'algorithmique 3 - Intranet104 Back-track x y z F Sous-arbre en attente! en attente! Quelle valeur pour x ? Faux Vrai Choix concernant y !

105 13 novembre 2006Cours d'algorithmique 3 - Intranet105 Back-track x y z F Sous-arbres en attente! en attente! Quelle valeur pour x ? Faux Vrai VraiFaux Quelle valeur pour y ?

106 13 novembre 2006Cours d'algorithmique 3 - Intranet106 Back-track x y z F Sous-arbres en attente! en attente! Quelle valeur pour x ? Faux Vrai Vrai Vrai Faux Faux Quelle valeur pour y ? Quelle valeur pour z ?

107 13 novembre 2006Cours d'algorithmique 3 - Intranet107 Back-track x y z F Cheminactuel. Sous-arbres en attente! en attente!

108 13 novembre 2006Cours d'algorithmique 3 - Intranet108 Back-track x y z F Cheminactuel. Sous-arbres en attente! en attente!

109 13 novembre 2006Cours d'algorithmique 3 - Intranet109 Back-track x y z F Cheminactuel. Sous-arbres en attente! en attente!

110 13 novembre 2006Cours d'algorithmique 3 - Intranet110 Back-track x y z F Exploré sans succès ! Cheminactuel. Sous-arbres en attente! en attente!

111 13 novembre 2006Cours d'algorithmique 3 - Intranet111 Back-track x y z F Exploré sans succès ! Cheminactuel. Sous-arbres en attente! en attente!

112 13 novembre 2006Cours d'algorithmique 3 - Intranet112 Back-track x y z F Exploré sans succès ! Cheminactuel. Sous-arbres en attente! en attente!

113 13 novembre 2006Cours d'algorithmique 3 - Intranet113 Back-track x y z F Explorés sans succès ! Cheminactuel. Sous-arbres en attente! en attente!

114 13 novembre 2006Cours d'algorithmique 3 - Intranet114 Back-track x y z F Explorés sans succès ! Cheminactuel. Sous-arbre en attente! en attente! Un peu plus tard …

115 13 novembre 2006Cours d'algorithmique 3 - Intranet115 Back-track x y z F Explorés sans succès ! Cheminactuel. Sous-arbre en attente! en attente!

116 13 novembre 2006Cours d'algorithmique 3 - Intranet116 Back-track x y z F Explorés sans succès ! Cheminactuel. Sous-arbre en attente! en attente!

117 13 novembre 2006Cours d'algorithmique 3 - Intranet117 Situation générale du Back-track Cheminactuel.

118 13 novembre 2006Cours d'algorithmique 3 - Intranet118 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès.

119 13 novembre 2006Cours d'algorithmique 3 - Intranet119 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement.

120 13 novembre 2006Cours d'algorithmique 3 - Intranet120 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement. Dynamique :

121 13 novembre 2006Cours d'algorithmique 3 - Intranet121 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement. Dynamique : Nous abandonnons les points de back-track !

122 13 novembre 2006Cours d'algorithmique 3 - Intranet122 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement. Dynamique :

123 13 novembre 2006Cours d'algorithmique 3 - Intranet123 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement. Dynamique :

124 13 novembre 2006Cours d'algorithmique 3 - Intranet124 Situation générale du Back-track Cheminactuel. Sous-arbres explorés sans succès. Sous-arbres en attente de traitement. Dynamique :

125 13 novembre 2006Cours d'algorithmique 3 - Intranet125 Situation générale du Back-track, échec final Sous-arbres explorés sans succès. Dynamique : Cheminactuel.

126 13 novembre 2006Cours d'algorithmique 3 - Intranet126 Situation générale du Back-track, échec final Sous-arbres explorés sans succès. Dynamique : Cheminactuel.

127 13 novembre 2006Cours d'algorithmique 3 - Intranet127 Situation générale du Back-track, échec final Sous-arbres explorés sans succès. Dynamique : Cheminactuel.

128 13 novembre 2006Cours d'algorithmique 3 - Intranet128 L E C O D E D U B A C K - T R A C K Back-track, code générique

129 13 novembre 2006Cours d'algorithmique 3 - Intranet129 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 …

130 13 novembre 2006Cours d'algorithmique 3 - Intranet130 Back-track, code générique int back_track (un_type situation) {if ( decidable(situation) ) return( ca_vaut_tant(situation) ); else... }

131 13 novembre 2006Cours d'algorithmique 3 - Intranet131 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) );... }

132 13 novembre 2006Cours d'algorithmique 3 - Intranet132 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 */ else... }

133 13 novembre 2006Cours d'algorithmique 3 - Intranet133 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 */ else return( seconde_alternative(situation) ); }

134 13 novembre 2006Cours d'algorithmique 3 - Intranet134 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 */ else return( seconde_alternative(situation) ); } Comme pour Fibonnacci, nous parcourons un arbre imaginaire, qui ne sera jamais construit en tant que tel !

135 13 novembre 2006Cours d'algorithmique 3 - Intranet135 Back-track, toutes les solutions Un échec est un ensemble vide de succès. Un échec est un ensemble vide de succès. Nous explorons toutes les alternatives. Nous explorons toutes les alternatives. Nous construisons lunion de toutes les solutions. Nous construisons lunion de toutes les solutions.

136 13 novembre 2006Cours d'algorithmique 3 - Intranet136 Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) {... }

137 13 novembre 2006Cours d'algorithmique 3 - Intranet137 Back-track, toutes les solutions set_un_type back_track_toutes (un_type situation) {if ( decidable(situation) )... else... }

138 13 novembre 2006Cours d'algorithmique 3 - Intranet138 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( {} ); else... }

139 13 novembre 2006Cours d'algorithmique 3 - Intranet139 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( {} ); else return( back_track_toutes(premiere_alternative(situation)) union back_track_toutes(seconde_alternative(situation)) ); }

140 13 novembre 2006Cours d'algorithmique 3 - Intranet140 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

141 13 novembre 2006Cours d'algorithmique 3 - Intranet141 Minimax Considérons un arbre dont : 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.

142 13 novembre 2006Cours d'algorithmique 3 - Intranet142 Minimax Considérons un arbre dont : 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 : Par réduction nous calculons une valeur pour la racine : et ou et V F et VVFV

143 13 novembre 2006Cours d'algorithmique 3 - Intranet143 Minimax Considérons un arbre dont : 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 : Par réduction nous calculons une valeur pour la racine : et ou et V F et VVFV F V

144 13 novembre 2006Cours d'algorithmique 3 - Intranet144 Minimax Considérons un arbre dont : 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 : Par réduction nous calculons une valeur pour la racine : et ou et V F et VVFV F V V

145 13 novembre 2006Cours d'algorithmique 3 - Intranet145 Minimax Considérons un arbre dont : 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 : Par réduction nous calculons une valeur pour la racine : et ou et V F et VVFV F V V V

146 13 novembre 2006Cours d'algorithmique 3 - Intranet146 Minimax Nous navons pas toujours besoin de parcourir tout larbre. et ou et V F et VVFV F V V V

147 13 novembre 2006Cours d'algorithmique 3 - Intranet147 Minimax Nous navons pas toujours besoin de parcourir tout larbre. et ou V et VV V V V ??????

148 13 novembre 2006Cours d'algorithmique 3 - Intranet148 Minimax Nous navons pas toujours besoin de parcourir tout larbre. et ou V et VV V V V ?????? Ces sous-arbres nont aucune incidence sur le résultat ! ! !

149 13 novembre 2006Cours d'algorithmique 3 - Intranet149 Minimax Règles pour le et : Règles pour le et : et ?FV et ?

150 13 novembre 2006Cours d'algorithmique 3 - Intranet150 Minimax Règles pour le et : Règles pour le et : et ?FV et ? donne ? donne F

151 13 novembre 2006Cours d'algorithmique 3 - Intranet151 Minimax Règles pour le et : Règles pour le et : et ?FV et ? donne ? donne F Règles pour le ou : Règles pour le ou : ou ?FV ou ?

152 13 novembre 2006Cours d'algorithmique 3 - Intranet152 Minimax Règles pour le et : Règles pour le et : et ?FV et ? donne ? donne F Règles pour le ou : Règles pour le ou : ou ?FV ou ? donne V donne ?

153 13 novembre 2006Cours d'algorithmique 3 - Intranet153 Minimax Règles pour le et : Règles pour le et : et ?FV et ? donne ? donne F Règles pour le ou : Règles pour le ou : ou ?FV ou ? donne V donne ? On dit que lon fait des coupes dans larbre.

154 13 novembre 2006Cours d'algorithmique 3 - Intranet154 Minimax On peut faire la substitution suivante, sans rien changer aux comportements : 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 ! ! !

155 13 novembre 2006Cours d'algorithmique 3 - Intranet155 Minimax Règles pour le min : Règles pour le min : min ?01 min ? donne ? donne 0 Règles pour le max : Règles pour le max : max ?01 max ? donne 1 donne ?

156 13 novembre 2006Cours d'algorithmique 3 - Intranet156 Minimax Définition générale dun arbre Minimax : Définition générale dun 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.

157 13 novembre 2006Cours d'algorithmique 3 - Intranet157 Minimax Définition générale dun arbre Minimax : Définition générale dun 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 dun arbre A vaut : La valeur Minimax dun arbre A vaut : – si A est une feuille, alors la valeur de cette feuille,

158 13 novembre 2006Cours d'algorithmique 3 - Intranet158 Minimax Définition générale dun arbre Minimax : Définition générale dun 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 dun arbre A vaut : La valeur Minimax dun 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, alors le maximum des valeurs minimax de B et C,

159 13 novembre 2006Cours d'algorithmique 3 - Intranet159 Minimax Définition générale dun arbre Minimax : Définition générale dun 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 dun arbre A vaut : La valeur Minimax dun 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, 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. alors le minimum des valeurs minimax de B et C.

160 13 novembre 2006Cours d'algorithmique 3 - Intranet160 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) ) ) ) ; else return( min( minimax( genere_fils_gauche(situation), not(max_ou_pas) ), minimax( genere_fils_droit(situation), not(max_ou_pas) ) ) ) ; }

161 13 novembre 2006Cours d'algorithmique 3 - Intranet161 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) ) ) ) ; else return( min( minimax( genere_fils_gauche(situation), not(max_ou_pas) ), minimax( genere_fils_droit(situation), not(max_ou_pas) ) ) ) ; } Le cas darrêt est trivial !

162 13 novembre 2006Cours d'algorithmique 3 - Intranet162 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) ) ) ) ; else return( min( minimax( genere_fils_gauche(situation), not(max_ou_pas) ), minimax( genere_fils_droit(situation), not(max_ou_pas) ) ) ) ; } Cest assez logique !

163 13 novembre 2006Cours d'algorithmique 3 - Intranet163 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) ) ) ) ; else return( min( minimax( genere_fils_gauche(situation), not(max_ou_pas) ), minimax( genere_fils_droit(situation), not(max_ou_pas) ) ) ) ; } Cest assez logique !

164 13 novembre 2006Cours d'algorithmique 3 - Intranet164 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) ) ) ) ; else return( min( minimax( genere_fils_gauche(situation), not(max_ou_pas) ), minimax( genere_fils_droit(situation), not(max_ou_pas) ) ) ) ; } Cest assez logique ! Cas symétrique !

165 13 novembre 2006Cours d'algorithmique 3 - Intranet165 Minimax Les arbres Minimax servent dans les jeux : 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 5 min 317

166 13 novembre 2006Cours d'algorithmique 3 - Intranet166 Minimax Les arbres Minimax servent dans les jeux : 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 5 min

167 13 novembre 2006Cours d'algorithmique 3 - Intranet167 Minimax Les arbres Minimax servent dans les jeux : 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 5 min Donc, MAX joue son meilleur choix.

168 13 novembre 2006Cours d'algorithmique 3 - Intranet168 Minimax Les arbres Minimax servent dans les jeux : 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 5 min Donc, MAX joue son meilleur choix. Et MIN joue sa meilleure réplique.

169 13 novembre 2006Cours d'algorithmique 3 - Intranet169 Minimax Les arbres Minimax servent dans les jeux : 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 5 min 317 Ce choix pourrait être tentant pour MAX qui espère obtenir 7 !

170 13 novembre 2006Cours d'algorithmique 3 - Intranet170 Minimax Les arbres Minimax servent dans les jeux : 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 5 min 317 Ce choix pourrait être tentant pour MAX qui espère obtenir 7 ! MIN est très fort et ne concède que le minimum !

171 13 novembre 2006Cours d'algorithmique 3 - Intranet171 Minimax Les arbres Minimax servent dans les jeux : 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 5 min Le chemin du minimax correspond à la fois à : - la meilleure attaque de MAX - la meilleure attaque de MAX - et à la meilleure riposte de MIN. - et à la meilleure riposte de MIN.

172 13 novembre 2006Cours d'algorithmique 3 - Intranet172 Minimax Pourquoi construire un arbre minimax plutôt que dévaluer tout de suite une position ? 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??

173 13 novembre 2006Cours d'algorithmique 3 - Intranet173 Minimax Pourquoi construire un arbre minimax plutôt que dévaluer tout de suite une position ? 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 ! max min 5 min A gauche, assez stable entre 3 et 5. - A gauche, assez stable entre 3 et 5. - A droite, beaucoup plus instable. - A droite, beaucoup plus instable.

174 13 novembre 2006Cours d'algorithmique 3 - Intranet174 Minimax Minimax sapplique aux jeux : Minimax sapplique aux jeux : – de somme nulle, – déterministes, – et dinformation parfaite.

175 13 novembre 2006Cours d'algorithmique 3 - Intranet175 Minimax Minimax sapplique aux jeux : Minimax sapplique aux jeux : – de somme nulle, – déterministes, – et dinformation parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa.

176 13 novembre 2006Cours d'algorithmique 3 - Intranet176 Minimax Minimax sapplique aux jeux : Minimax sapplique aux jeux : – de somme nulle, – déterministes, – et dinformation parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas délément de chance comme le résultat dun lancer de dé.

177 13 novembre 2006Cours d'algorithmique 3 - Intranet177 Minimax Minimax sapplique aux jeux : Minimax sapplique aux jeux : – de somme nulle, – déterministes, – et dinformation parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas délément de chance comme le résultat dun lancer de dé. Tous voient toute linformation, contrairement aux jeux de cartes où la main est cachée.

178 13 novembre 2006Cours d'algorithmique 3 - Intranet178 Minimax Minimax sapplique aux jeux : Minimax sapplique aux jeux : – de somme nulle, – déterministes, – et dinformation parfaite. Mon avantage est un inconvénient pour mon adversaire, et vice-versa. Pas délément de chance pour le résultat dun lancer de dé. Tous voient toute linformation, contrairement aux jeux de carte où la main est cachée. Exemples : les échecs, les dames, le go, …

179 13 novembre 2006Cours d'algorithmique 3 - Intranet179 Synthèse Parcours darbres. Parcours darbres. Modification darbres. Modification darbres. Induction sur la structure. Induction sur la structure. Back-Track. Back-Track. Minimax. Minimax.

180 13 novembre 2006Cours d'algorithmique 3 - Intranet180 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 ! ! !


Télécharger ppt "Cours d'algorithmique 3 - Intranet 1 13 novembre 2006 Cours dAlgorithmique Parcours darbres. Induction sur la structure. Back-track.Minimax."

Présentations similaires


Annonces Google