Cours d'algorithmique 3 - Intranet 1 13 novembre 2006 Cours dAlgorithmique Parcours darbres....

Preview:

Citation preview

Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1113 novembre 200613 novembre 2006

Cours d’AlgorithmiqueCours d’Algorithmique

Parcours d’arbres.Parcours d’arbres.

Induction sur la structure.Induction sur la structure.

Back-track.Back-track.

Minimax.Minimax.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 22

• Trier et chercherTrier et chercher• Listes etListes et arbres arbres• Le back-trackLe back-track• Arbres équilibrésArbres équilibrés• Récursivité etRécursivité et induction sur la structureinduction sur la structure• Divide and conquerDivide and conquer• MinimaxMinimax• DérécursionDérécursion• NP-complétudeNP-complétude• Logique de HoareLogique de Hoare• Programmation dynamiqueProgrammation dynamique• Complexité et calculabilitéComplexité et calculabilité

Les grandes lignes du coursLes grandes lignes du cours

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 33

Fibonnacci et les arbresFibonnacci 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.Fibonnacci est une fonction qui comporte deux appels récursifs.

Tout appel construit donc deux autres appels.Tout appel construit donc deux autres appels.

Construisons cet arbre.Construisons cet arbre.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 44

Fibonnacci et les arbresFibonnacci 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.Fibonnacci est une fonction qui comporte deux appels récursifs.

Tout appel construit donc deux autres appels.Tout appel construit donc deux autres appels.

Construisons cet arbre.Construisons cet arbre.

Les cas d’arrêt.Les cas d’arrêt.

Les appels récursifs.Les appels récursifs.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 55

Fibonnacci et les arbresFibonnacci 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) ) ) ; }

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 66

Fibonnacci et les arbresFibonnacci et les arbres----------------------------------------------------------------------------------------------------------------------------------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 77

Fibonnacci et les arbresFibonnacci et les arbres----------------------------------------------------------------------------------------------------------------------------------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

On observe que de nombreux calculs sont répétés !On observe que de nombreux calculs sont répétés !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 88

Calcul de la somme des feuillesCalcul 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 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 99

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

11 00

11

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1010

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

11 00

1111

22

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1111

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55

11 00

1111

22 11

arbre_fibo(5)arbre_fibo(5)

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1212

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55somme_somme_arbre_fibo(5) arbre_fibo(5) = 5= 5

11 00

1111

22 11

33

11

22

55

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1313

Calcul de la somme des feuillesCalcul 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 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1414

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

11

accumule = 0accumule = 0

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1515

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

11

accumule = 0accumule = 0

11

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1616

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55arbre_fibo(5)arbre_fibo(5)

11

accumule = 0accumule = 0

11

22

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1717

somme_somme_arbre_fibo(5) arbre_fibo(5) = 5= 5

Calcul de la somme des feuillesCalcul de la somme des feuilles----------------------------------------------------------------------------------------------------------------------------

------

1 0

22

1 0

22 1

33

44

1 0

22 1

33

55

11

accumule = 0accumule = 0

11

22 . . .. . .

accumule = 5accumule = 5

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1818

L E SL E ST Y P E ST Y P E S

D ED EP A R C O U R SP A R C O U R S

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 1919

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg = appel ( fg(a) );res_fg = appel ( fg(a) );

res_fd = appel ( fd(a) );res_fd = appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2020

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg = res_fg = appel ( fg(a) );appel ( fg(a) );

res_fd = appel ( fd(a) );res_fd = appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2121

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg =res_fg = appel ( fg(a) );appel ( fg(a) );

res_fd = appel ( fd(a) );res_fd = appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2222

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg =res_fg = appel ( fg(a) );appel ( fg(a) );

res_fd = res_fd = appel ( fd(a) );appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2323

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg =res_fg = appel ( fg(a) );appel ( fg(a) );

res_fd =res_fd = appel ( fd(a) );appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2424

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours préfixeParcours préfixe

res_fg =res_fg = appel ( fg(a) );appel ( fg(a) );

res_fd =res_fd = appel ( fd(a) );appel ( fd(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

Ou encore :Ou encore : ... appel ( fg(a) ) / appel ( fd(a) ) ...... appel ( fg(a) ) / appel ( fd(a) ) ...

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2525

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours suffixe ou postfixeParcours suffixe ou postfixe

res_fg = appel (res_fg = appel ( fd fd(a) );(a) );

res_fd = appel (res_fd = appel ( fg fg(a) );(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2626

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours suffixe ou postfixeParcours suffixe ou postfixe

res_fg = appel (res_fg = appel ( fd fd(a) );(a) );

res_fd = appel (res_fd = appel ( fg fg(a) );(a) );

return( ... res_fg ... res_fd ... );return( ... res_fg ... res_fd ... );

Ou encore :Ou encore : ... appel (... appel ( fd fd(a) ) / appel ( (a) ) / appel ( fgfg(a) ) ...(a) ) ...

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2727

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

Parcours avec opérateur commutatif : Parcours avec opérateur commutatif : l’ordre de parcours estl’ordre de parcours estsans importance !sans importance !

... oper_commute ( ... oper_commute ( fgfg(a) , (a) , fdfd(a) ) ...(a) ) ...

... oper_commute ( ... oper_commute ( fdfd(a) , (a) , fgfg(a) ) ...(a) ) ...

Exemple : notre calcul de la somme de Fibonnacci.Exemple : notre calcul de la somme de Fibonnacci.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2828

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit avant, soit après, soit pendant !Traitement de l’étiquette, soit avant, soit après, soit pendant !

1 5

++ 3

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 2929

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3030

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3131

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3232

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3333

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3434

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit après, soit pendant !, soit après, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3535

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit pendant !, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de Impression postfixe de l’arbre :l’arbre :

1 1 5 5 + + 3 3 **

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3636

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit pendant !, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de Impression postfixe de l’arbre :l’arbre :

1 1 5 5 + + 3 3 **

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3737

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit pendant !, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de Impression postfixe de l’arbre :l’arbre :

1 1 5 5 + + 3 3 **

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3838

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit pendant !, soit pendant !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de Impression postfixe de l’arbre :l’arbre :

1 1 5 5 + + 3 3 **

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 3939

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit , soit pendantpendant ! !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de l’arbre :Impression postfixe de l’arbre :

1 1 5 5 + + 3 3 **

• Impression infixe parenthésée :Impression infixe parenthésée :

( ( ( ( 1 1 + + 5 5 ) ) * * 3 3 ))

**(( ))

))((

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4040

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit , soit pendantpendant ! !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de l’arbre :Impression postfixe de l’arbre :

1 1 5 5 + + 3 3 **

• Impression infixe parenthésée :Impression infixe parenthésée :

( ( ( ( 1 1 + + 5 5 ) ) * * 3 3 ))

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4141

Types de parcours avec étiquettesTypes de parcours avec étiquettes----------------------------------------------------------------------------------------------------------------------------

------Traitement de l’étiquette, soit Traitement de l’étiquette, soit avantavant, soit , soit aprèsaprès, soit , soit pendantpendant ! !

1 5

++ 3

• Impression préfixe de l’arbre :Impression préfixe de l’arbre :

** + + 1 1 5 5 33

• Impression postfixe de l’arbre :Impression postfixe de l’arbre :

1 1 5 5 + + 3 3 **

• Impression infixe parenthésée :Impression infixe parenthésée :

( ( ( ( 1 1 + + 5 5 ) ) * * 3 3 ))

**

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4242

M O D I F I C A T I O M O D I F I C A T I O NN

D ‘ U ND ‘ U NA R B R EA R B R E

Types de parcoursTypes de parcours----------------------------------------------------------------------------------------------------------------------------

------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4343

Modification d’un arbreModification d’un 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 ?

• OUIOUI– soit, en le reconstruisant,soit, en le reconstruisant,– soit, en le modifiantsoit, en le modifiant

physiquement.physiquement.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4444

Modification d’un arbreModification d’un 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 ?

• OUIOUI– soit, en le reconstruisant,soit, en le reconstruisant,– soit, en le modifiantsoit, en le modifiant

physiquement.physiquement.

33 55 77

2211

11RemplacerRemplacer

parpar dansdans

44 66

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4545

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------• En reconstruisant :En reconstruisant :

33 55 77

22

44 66

Partie qui doit êtrePartie qui doit êtrereconstruite.reconstruite.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4646

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------• En reconstruisant :En reconstruisant :

33 55 77

22

44 66

Partie qui doit êtrePartie qui doit êtrereconstruite.reconstruite.

cree_noeud(cree_noeud( fg(arbre) fg(arbre) ,, cree_noeud(cree_noeud( fg(fd(arbre))fg(fd(arbre)) ,, cree_noeud(cree_noeud( cree_noeud(cree_feuille(4) ,cree_noeud(cree_feuille(4) , cree_feuille(6))cree_feuille(6)) ,, fd(fd(fd(arbre))) fd(fd(fd(arbre))) ) ) ) ;) ) ) ;

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4747

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------• En reconstruisant :En reconstruisant :

33 55 77

22

44 66

Partie qui doit êtrePartie qui doit êtrereconstruite.reconstruite.

cree_noeud(cree_noeud( fg(arbre)fg(arbre) ,, cree_noeud(cree_noeud( fg(fd(arbre))fg(fd(arbre)) ,, cree_noeud(cree_noeud( cree_noeud(cree_feuille(4) ,cree_noeud(cree_feuille(4) , cree_feuille(6))cree_feuille(6)) ,, fd(fd(fd(arbre)))fd(fd(fd(arbre))) ) ) ) ;) ) ) ;

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4848

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------• En modifiant :En modifiant :

33 55 77

22

44 66

Pointeur qui estPointeur qui estmodifié.modifié.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 4949

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------• En modifiant :En modifiant :

33 55 77

22

44 66

Pointeur qui estPointeur qui estmodifié.modifié.

modifie_fg_noeud(modifie_fg_noeud( fd(fd(arbre))fd(fd(arbre)) ,, cree_noeud( cree_feuille(4) ,cree_noeud( cree_feuille(4) , cree_feuille(6) )cree_feuille(6) ) ) ;) ;

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5050

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------Attention aux Attention aux partages de structurepartages de structure

avec avec modifications physiques !modifications physiques !

sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );arbre = cree_noeud( sous_arbre , sous_arbre );arbre = cree_noeud( sous_arbre , sous_arbre );

33 55

ReprésentationReprésentationphysique !physique !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5151

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------Attention aux Attention aux partages de structurepartages de structure

avec avec modifications physiques !modifications physiques !

33 55

sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );arbre = cree_noeud( sous_arbre , sous_arbre );arbre = cree_noeud( sous_arbre , sous_arbre );

33 55

ReprésentationReprésentationphysique !physique !

33 55

L’arbre logique ! ! !L’arbre logique ! ! !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5252

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------Attention aux Attention aux partages de structurepartages de structure

avec avec modifications physiques !modifications physiques !

33 55

sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );arbre = cree_noeud( sous_arbre , sous_arbre );arbre = cree_noeud( sous_arbre , sous_arbre );

99 55

ReprésentationReprésentationphysique !physique !

99 55

L’arbre logique ! ! !L’arbre logique ! ! !

ReconstructionReconstructiond’arbre.d’arbre.

ModificationModificationphysique.physique.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5353

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------Attention aux Attention aux partages de structurepartages de structure

avec avec modifications physiques !modifications physiques !

33 55

sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );arbre = cree_noeud( sous_arbre , sous_arbre );arbre = cree_noeud( sous_arbre , sous_arbre );

99 55

ReprésentationReprésentationphysique !physique !

99 55

L’arbre logique ! ! !L’arbre logique ! ! !

ReconstructionReconstructiond’arbre.d’arbre.

ModificationModificationphysique.physique.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5454

Modification d’un arbreModification d’un arbre----------------------------------------------------------------------------------------------------------------------------

------Attention aux Attention aux partages de structurepartages de structure

avec avec modifications physiques !modifications physiques !

33 55

sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );sous_arbre = cree_noeud( cree_feuille(3) , cree_feuille(5) );arbre = cree_noeud( sous_arbre , sous_arbre );arbre = cree_noeud( sous_arbre , sous_arbre );

99 55

ReprésentationReprésentationphysique !physique !

99 55

L’arbre logique ! ! !L’arbre logique ! ! !

ReconstructionReconstructiond’arbre.d’arbre.

ModificationModificationphysique.physique.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5555

I N D U C T I O NI N D U C T I O NS U RS U RL E SL E S

S T R U C T U R E SS T R U C T U R E S

Induction sur les structuresInduction sur les structures----------------------------------------------------------------------------------------------------------------------------------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5656

Induction sur les structuresInduction 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 la propriété pour 0, le premier entier naturel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5757

Induction sur les structuresInduction 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 la propriété pour 0, le premier entier naturel.

– On démontre que la propriété reste vraie pour i+1, si elle On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . est vraie pour i . C’est le pas d’induction !C’est le pas d’induction !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5858

Induction sur les structuresInduction 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 la propriété pour 0, le premier entier naturel.

– On démontre que la propriété reste vraie pour i+1, si elle On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . est vraie pour i . C’est le pas d’induction !C’est le pas d’induction !

– Donc, elle est vraie pour tout entier naturel.Donc, elle est vraie pour tout entier naturel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 5959

Induction sur les structuresInduction 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 la propriété pour 0, le premier entier naturel.

– On démontre que la propriété reste vraie pour i+1, si elle On démontre que la propriété reste vraie pour i+1, si elle est vraie pour i . est vraie pour i . C’est le pas d’induction !C’est le pas d’induction !

– Donc, elle est vraie pour tout entier naturel.Donc, elle est vraie pour tout entier naturel.

• Induction Induction totaletotale sur les entiers naturels : sur les entiers naturels :

– On démontre la propriété pour 0, le premier entier naturel.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 On démontre que la propriété reste vraie pour i+1, si elle est vraie pour est vraie pour tous les entiers de 0 àtous les entiers de 0 à i . C’est le pas i . C’est le pas d’induction !d’induction !

– Donc, elle est vraie pour tout entier naturel.Donc, elle est vraie pour tout entier naturel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6060

I N D U C T I O NI N D U C T I O NS U RS U RL E SL E S

L I S T E SL I S T E S

Induction sur les structuresInduction sur les structures----------------------------------------------------------------------------------------------------------------------------------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6161

Induction sur les listesInduction sur les listes----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les listeslistes : :

– On démontre la propriété pour On démontre la propriété pour la liste videla liste vide (ceci ne (ceci ne marche donc pas pour les listes circulaires !).marche donc pas pour les listes circulaires !).

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6262

Induction sur les listesInduction sur les listes----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les listeslistes : :

– On démontre la propriété pour On démontre la propriété pour la liste videla liste vide (ceci ne (ceci ne marche donc pas pour les listes circulaires !).marche donc pas pour les listes circulaires !).

– On suppose la propriété vraie pour On suppose la propriété vraie pour une liste de longueur iune liste de longueur i

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6363

Induction sur les listesInduction sur les listes----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les listeslistes : :

– On démontre la propriété pour On démontre la propriété pour la liste videla liste vide (ceci ne (ceci ne marche donc pas pour les listes circulaires !).marche donc pas pour les listes circulaires !).

– On suppose la propriété vraie pour On suppose la propriété vraie pour une liste de longueur iune liste de longueur i

– et on démontre qu’elle reste vraie pour la liste de et on démontre qu’elle reste vraie pour la liste de longueur i+1 que l’on obtient longueur i+1 que l’on obtient en ajoutant un élément en ajoutant un élément (bien choisi) en tête(bien choisi) en tête de liste. de liste.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6464

Induction sur les listesInduction sur les listes----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les listeslistes : :

– On démontre la propriété pour On démontre la propriété pour la liste videla liste vide (ceci ne (ceci ne marche donc pas pour les listes circulaires !).marche donc pas pour les listes circulaires !).

– On suppose la propriété vraie pour On suppose la propriété vraie pour une liste de longueur iune liste de longueur i

– et on démontre qu’elle reste vraie pour la liste de et on démontre qu’elle reste vraie pour la liste de longueur i+1 que l’on obtient longueur i+1 que l’on obtient en ajoutant un élément en ajoutant un élément (bien choisi) en tête(bien choisi) en tête de liste. de liste.

– Variantes : éventuellement, une propriété n’est vraie que Variantes : éventuellement, une propriété n’est vraie que pour une liste de longueur au moins k :pour une liste de longueur au moins k :

• On démontre pour kOn démontre pour k

• et on démontre qu’elle reste vraie pour les listes plus longues.et on démontre qu’elle reste vraie pour les listes plus longues.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6565

I N D U C T I O NI N D U C T I O NS U RS U RL E SL E S

A R B R E SA R B R E S

Induction sur les structuresInduction sur les structures----------------------------------------------------------------------------------------------------------------------------------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6666

Induction sur les arbresInduction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les arbresarbres : :

– On démontre la propriété pour On démontre la propriété pour une feuille quelconqueune feuille quelconque..

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6767

Induction sur les arbresInduction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les arbresarbres : :

– On démontre la propriété pour On démontre la propriété pour une feuille quelconqueune feuille quelconque..

– On suppose la propriété vraie pour On suppose la propriété vraie pour les sous-arbresles sous-arbres

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6868

Induction sur les arbresInduction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les arbresarbres : :

– On démontre la propriété pour On démontre la propriété pour une feuille quelconqueune feuille quelconque..

– On suppose la propriété vraie pour On suppose la propriété vraie pour les sous-arbresles sous-arbres

– et on démontre qu’elle reste vraie pour l’arbre que l’on et on démontre qu’elle reste vraie pour l’arbre que l’on obtient obtient en ajoutant un nœud père au-dessus des différents en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis)sous-arbres (bien choisis)..

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 6969

Induction sur les arbresInduction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Induction sur les Induction sur les arbresarbres : :

– On démontre la propriété pour On démontre la propriété pour une feuille quelconqueune feuille quelconque..

– On suppose la propriété vraie pour On suppose la propriété vraie pour les sous-arbresles sous-arbres

– et on démontre qu’elle reste vraie pour l’arbre que l’on et on démontre qu’elle reste vraie pour l’arbre que l’on obtient obtient en ajoutant un nœud père au-dessus des différents en ajoutant un nœud père au-dessus des différents sous-arbres (bien choisis)sous-arbres (bien choisis)..

– Remarque :Remarque :

• Le raisonnement de correction d’une fonction récursive Le raisonnement de correction d’une fonction récursive sur arbres, listes, etc, se fait de la même manière :sur arbres, listes, etc, se fait de la même manière :

– On démontre la correction du cas de base,On démontre la correction du cas de base,– on suppose les appels récursifs correctson suppose les appels récursifs corrects– et on démontre la correction de l’appel courant.et on démontre la correction de l’appel courant.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7070

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.profonde.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7171

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.profonde.

int profond (ptr_arbre arbre)

{if ( est_feuille(arbre) )

return( 0 );

else

return( 1 + max( profond(fg(arbre)), profond(fd(arbre)) )); }

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7272

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.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 !Le cas d’arrêt est trivialement correct !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7373

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.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 !Les appels récursifs sont corrects par hypothèse !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7474

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.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 !Les appels récursifs sont corrects par hypothèse !

La plus grande des profondeurs.La plus grande des profondeurs.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7575

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.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 !Les appels récursifs sont corrects par hypothèse !

La plus grande des profondeurs.La plus grande des profondeurs.

La profondeur de notre arbre ! ! !La profondeur de notre arbre ! ! !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7676

Correction d’une fonction récursiveCorrection d’une fonction récursive----------------------------------------------------------------------------------------------------------------------------------

• La fonction ci-dessous calcule la profondeur d’un arbre !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 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 nombre de fois où l’on doit « descendre » vers un fils avant d’atteindre le nœud ou la feuille en question.le nœud ou la feuille en question.

– La profondeur d’un arbre est la profondeur de la feuille la plus La profondeur d’un arbre est la profondeur de la feuille la plus profonde.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 !Les appels récursifs sont corrects par hypothèse !

La plus grande des profondeurs.La plus grande des profondeurs.

La profondeur de notre arbre ! ! !La profondeur de notre arbre ! ! !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7777

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Soient Soient F F ( A ) le nombre de feuilles et ( A ) le nombre de feuilles et N N ( A ) le ( A ) le nombre de nœuds internes d’un arbre A.nombre de nœuds internes d’un arbre A.

• Si A est binaire, alors : Si A est binaire, alors : F F ( A ) = ( A ) = NN ( A ) + 1 ( A ) + 1

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7878

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Soient Soient F F ( A ) le nombre de feuilles et ( A ) le nombre de feuilles et N N ( A ) le ( A ) le nombre de nœuds internes d’un arbre A.nombre de nœuds internes d’un arbre A.

• Si A est binaire, alors : Si A est binaire, alors : F F ( A ) = ( A ) = NN ( A ) + 1 ( A ) + 1

• Preuve :Preuve :– A est une feuille : A est une feuille : FF ( A ) = 1 = 0 + 1 = ( A ) = 1 = 0 + 1 = NN ( A ) + 1 ! ( A ) + 1 !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 7979

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Soient Soient F F ( A ) le nombre de feuilles et ( A ) le nombre de feuilles et N N ( A ) le ( A ) le nombre de nœuds internes d’un arbre A.nombre de nœuds internes d’un arbre A.

• Si A est binaire, alors : Si A est binaire, alors : F F ( A ) = ( A ) = NN ( A ) + 1 ( A ) + 1

• Preuve :Preuve :– A est une feuille : A est une feuille : FF ( A ) = 1 = 0 + 1 = ( A ) = 1 = 0 + 1 = NN ( A ) + 1 ! ( A ) + 1 !– A est un nœud interne ayant les deux fils B et C :A est un nœud interne ayant les deux fils B et C :

• Hypothèse sur B : Hypothèse sur B : FF ( B ) = ( B ) = NN ( B ) + 1 ! ( B ) + 1 !

• Hypothèse sur C : Hypothèse sur C : FF ( C ) = ( C ) = NN ( C ) + 1 ! ( C ) + 1 !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8080

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Soient Soient F F ( A ) le nombre de feuilles et ( A ) le nombre de feuilles et N N ( A ) le ( A ) le nombre de nœuds internes d’un arbre A.nombre de nœuds internes d’un arbre A.

• Si A est binaire, alors : Si A est binaire, alors : F F ( A ) = ( A ) = NN ( A ) + 1 ( A ) + 1

• Preuve :Preuve :– A est une feuille : A est une feuille : FF ( A ) = 1 = 0 + 1 = ( A ) = 1 = 0 + 1 = NN ( A ) + 1 ! ( A ) + 1 !– A est un nœud interne ayant les deux fils B et C :A est un nœud interne ayant les deux fils B et C :

• Hypothèse sur B : Hypothèse sur B : FF ( B ) = ( B ) = NN ( B ) + 1 ! ( B ) + 1 !

• Hypothèse sur C : Hypothèse sur C : FF ( C ) = ( C ) = NN ( C ) + 1 ! ( C ) + 1 !

– Donc, pour A :Donc, pour A :

FF ( A ) = ( A ) = F F ( B ) + ( B ) + FF ( C ) = ( C ) = NN ( B ) + ( B ) + NN ( C ) + 1 + 1 ( C ) + 1 + 1

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8181

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• Soient Soient F F ( A ) le nombre de feuilles et ( A ) le nombre de feuilles et N N ( A ) le ( A ) le nombre de nœuds internes d’un arbre A.nombre de nœuds internes d’un arbre A.

• Si A est binaire, alors : Si A est binaire, alors : F F ( A ) = ( A ) = NN ( A ) + 1 ( A ) + 1

• Preuve :Preuve :– A est une feuille : A est une feuille : FF ( A ) = 1 = 0 + 1 = ( A ) = 1 = 0 + 1 = NN ( A ) + 1 ! ( A ) + 1 !– A est A est un nœud interneun nœud interne ayant les deux fils B et C : ayant les deux fils B et C :

• Hypothèse sur B : Hypothèse sur B : FF ( B ) = ( B ) = NN ( B ) + 1 ! ( B ) + 1 !

• Hypothèse sur C : Hypothèse sur C : FF ( C ) = ( C ) = NN ( C ) + 1 ! ( C ) + 1 !

– Donc, pour A :Donc, pour A :

FF ( A ) = ( A ) = F F ( B ) + ( B ) + FF ( C ) = ( C ) = NN ( B ) + ( B ) + NN ( C ) + 1 ( C ) + 1 + 1 + 1

= = NN ( A ) + 1 ! ! ! ( A ) + 1 ! ! !

NN ( A ) ( A )

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8282

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.du fils gauche d’une unité.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8383

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.du fils gauche d’une unité.

• Montrer que, pour une profondeur p fixée, l’arbre A est Montrer que, pour une profondeur p fixée, l’arbre A est unique !unique !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8484

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.du fils gauche d’une unité.

• Montrer que, pour une profondeur p fixée, l’arbre A est Montrer que, pour une profondeur p fixée, l’arbre A est unique !unique !

• Preuve :Preuve :– p = 1 : L’arbre est unique, car les deux fils sont des p = 1 : L’arbre est unique, car les deux fils sont des

feuilles !feuilles !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8585

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.du fils gauche d’une unité.

• Montrer que, pour une profondeur p fixée, l’arbre A est Montrer que, pour une profondeur p fixée, l’arbre A est unique !unique !

• Preuve :Preuve :– p = 1 : L’arbre est unique, car les deux fils sont des p = 1 : L’arbre est unique, car les deux fils sont des

feuilles !feuilles !– p > 1 : Le fils droit C doit être de profondeur p-1 et le p > 1 : Le fils droit C doit être de profondeur p-1 et le

filsfils

gauche B doit être de profondeur p-2 :gauche B doit être de profondeur p-2 :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8686

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.fils gauche d’une unité.

• Montrer que, pour une profondeur p fixée, l’arbre A est Montrer que, pour une profondeur p fixée, l’arbre A est unique !unique !

• Preuve :Preuve :– p = 1 : L’arbre est unique, car les deux fils sont des feuilles !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 filsp > 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 !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8787

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

• On considère un arbre A qui vérifie pour tous ses nœuds On considère un arbre A qui vérifie pour tous ses nœuds internes la propriété qui dit que :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 soit, la profondeur du fils droit dépasse la profondeur du fils gauche d’une unité.fils gauche d’une unité.

• Montrer que, pour une profondeur p fixée, l’arbre A est Montrer que, pour une profondeur p fixée, l’arbre A est unique !unique !

• Preuve :Preuve :– p = 1 : L’arbre est unique, car les deux fils sont des feuilles !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 filsp > 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 !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8888

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

Les voici :Les voici :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 8989

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

Les voici :Les voici :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9090

Preuves par induction sur les arbresPreuves par induction sur les arbres----------------------------------------------------------------------------------------------------------------------------------

Les voici :Les voici :

Le prochain.Le prochain.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9191

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

C h a n g e o n s d e s u j C h a n g e o n s d e s u j e t !e t !

E x p l o r a t i o n p a rE x p l o r a t i o n p a rs u c c è s - é c h e cs u c c è s - é c h e c

B A C K - T R A C KB A C K - T R A C K

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9292

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• Un exemple archi-classique :Un exemple archi-classique :

– Soient des variables v , … , v logiques,Soient des variables v , … , v logiques,11 nn

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9393

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• Un exemple archi-classique :Un exemple archi-classique :

– Soient des variables v , … , v logiques,Soient des variables v , … , v logiques,

– soit une formule soit une formule F F construite à partir de ces variables construite à partir de ces variables et des connectives et des connectives et , ou et , ou et et not ,not ,

11 nn

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9494

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• Un exemple archi-classique :Un exemple archi-classique :

– Soient des variables v , … , v logiques,Soient des variables v , … , v logiques,

– soit une formule soit une formule F F construite à partir de ces variables construite à partir de ces variables et des connectives et des connectives et , ou et , ou et et not ,not ,

– trouver un n-uplet de valeurs pour les v de façon à trouver un n-uplet de valeurs pour les v de façon à rendre vraie la formule rendre vraie la formule F .F .

11 nn

ii

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9595

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• Un exemple archi-classique :Un exemple archi-classique :

– Soient des variables v , … , v logiques,Soient des variables v , … , v logiques,

– soit une formule soit une formule F F construite à partir de ces variables et construite à partir de ces variables et des connectives des connectives et , ou et , ou et et not ,not ,

– trouver un n-uplet de valeurs pour les v de façon à rendre trouver un n-uplet de valeurs pour les v de façon à rendre vraie la formule vraie la formule F .F .

• Solution :Solution :

– Nous construisons la table de vérité ! C’est simple ! ! !Nous construisons la table de vérité ! C’est simple ! ! !

– Mais, c’est très coûteux ! Jusqu’à 2 cas à Mais, c’est très coûteux ! Jusqu’à 2 cas à inspecter ! ! !inspecter ! ! !

– Pouvons-nous faire mieux ? Probablement non ! ! !Pouvons-nous faire mieux ? Probablement non ! ! !

11 nn

ii

nn

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9696

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• F F = x = x et not(et not(y) y) et et zz

x y z x y z FF

0 0 0 0 0 0

0 0 1 0 0 1

0 1 0 0 1 0

0 1 1 0 1 1

1 0 0 1 0 0

1 0 1 1 0 1

1 1 01 1 0

1 1 11 1 1

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9797

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• F F = x = x et not(et not(y) y) et et zz

x y z x y z FF

0 0 0 0 0 0 00

0 0 1 0 0 1

0 1 0 0 1 0

0 1 1 0 1 1

1 0 0 1 0 0

1 0 1 1 0 1

1 1 01 1 0

1 1 11 1 1

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9898

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• F F = x = x et not(et not(y) y) et et zz

x y z x y z FF

0 0 0 0 0 0 00

0 0 1 0 0 1 00

0 1 0 0 1 0

0 1 1 0 1 1

1 0 0 1 0 0

1 0 1 1 0 1

1 1 01 1 0

1 1 11 1 1

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 9999

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

• F F = x = x et not(et not(y) y) et et zz

x y z x y z FF

0 0 0 0 0 0 00

0 0 1 0 0 1 00

0 1 0 0 1 0 00

0 1 1 0 1 1 00

1 0 0 1 0 0 00

1 0 1 1 0 1 1 1

1 1 01 1 0

1 1 11 1 1

• Au pire, nous parcourons tout le tableau avant de Au pire, nous parcourons tout le tableau avant de constater qu’il n’y a aucune solution.constater qu’il n’y a aucune solution.

• Parfois, nous avons une idée où chercher la solution, Parfois, nous avons une idée où chercher la solution, mais ce n’est pas toujours le cas.mais ce n’est pas toujours le cas.

Nous pouvons nous arrêter !Nous pouvons nous arrêter !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 100100

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

La même table horizontalement.La même table horizontalement.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 101101

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Quelle valeur pour x ?Quelle valeur pour x ?

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 102102

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x x 0 0 0 00 0 0 0 1 1 1 11 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Quelle valeur pour x ?Quelle valeur pour x ?

FauxFaux VraiVrai

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 103103

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x x 0 0 0 00 0 0 0 1 1 1 11 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Quelle valeur pour x ?Quelle valeur pour x ?

FauxFaux VraiVrai

D’abord et toujours !D’abord et toujours ! Ensuite, si besoin est !Ensuite, si besoin est !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 104104

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x x 0 0 0 00 0 0 0 1 1 1 11 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Sous-arbreSous-arbre en attente!en attente!

Quelle valeur pour x ?Quelle valeur pour x ?

FauxFaux VraiVrai

Choix concernant y !Choix concernant y !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 105105

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x x 0 0 0 00 0 0 0 1 1 1 11 1 1 1

y y 0 00 0 1 11 1 0 0 1 1 0 0 1 1

z 0 1z 0 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Sous-arbresSous-arbres en attente!en attente!

Quelle valeur pour x ?Quelle valeur pour x ?

FauxFaux VraiVrai

VraiVraiFauxFaux

Quelle valeur pour y ?Quelle valeur pour y ?

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 106106

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x x 0 0 0 00 0 0 0 1 1 1 11 1 1 1

y y 0 00 0 1 11 1 0 0 1 1 0 0 1 1

z z 00 1 1 0 1 0 1 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Sous-arbresSous-arbres en attente!en attente!

Quelle valeur pour x ?Quelle valeur pour x ?

FauxFaux VraiVrai

VraiVrai

VraiVrai

FauxFaux

FauxFaux

Quelle valeur pour y ?Quelle valeur pour y ?

Quelle valeur pour z ?Quelle valeur pour z ?

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 107107

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 108108

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 109109

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 110110

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Exploré sansExploré sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 111111

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Exploré sansExploré sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 112112

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Exploré sansExploré sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 113113

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Explorés sansExplorés sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbresSous-arbres en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 114114

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Explorés sansExplorés sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbreSous-arbre en attente!en attente!

Un peuUn peuplus tard …plus tard …

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 115115

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Explorés sansExplorés sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbreSous-arbre en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 116116

Back-trackBack-track----------------------------------------------------------------------------------------------------------------------------------

x 0 0 0 0 1 1 1 1x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1z 0 1 0 1 0 1 0 1

FF 0 0 0 0 0 0 0 0 0 0 11

Explorés sansExplorés sanssuccès !succès !

CheminCheminactuel.actuel.

Sous-arbreSous-arbre en attente!en attente!

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 117117

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 118118

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 119119

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 120120

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

Dynamique :Dynamique :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 121121

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

Dynamique :Dynamique :

Nous abandonnonsNous abandonnonsles points deles points deback-track !back-track !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 122122

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

Dynamique :Dynamique :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 123123

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

Dynamique :Dynamique :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 124124

Situation générale du Back-trackSituation générale du Back-track----------------------------------------------------------------------------------------------------------------------------------

CheminCheminactuel.actuel.

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Sous-arbres enSous-arbres enattente de traitement.attente de traitement.

Dynamique :Dynamique :

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 125125

Situation générale du Back-track, échec finalSituation générale du Back-track, échec final----------------------------------------------------------------------------------------------------------------------------------

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Dynamique :Dynamique :CheminCheminactuel.actuel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 126126

Situation générale du Back-track, échec finalSituation générale du Back-track, échec final----------------------------------------------------------------------------------------------------------------------------------

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Dynamique :Dynamique :CheminCheminactuel.actuel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 127127

Situation générale du Back-track, échec finalSituation générale du Back-track, échec final----------------------------------------------------------------------------------------------------------------------------------

Sous-arbresSous-arbresexplorés sans succès.explorés sans succès.

Dynamique :Dynamique :CheminCheminactuel.actuel.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 128128

L EL EC O D EC O D E

D UD UB A C K - T R A C KB A C K - T R A C K

Back-track, code génériqueBack-track, code générique----------------------------------------------------------------------------------------------------------------------------------

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 129129

Back-track, code génériqueBack-track, code générique----------------------------------------------------------------------------------------------------------------------------------

int back_track (un_type situation)

{ ...

}

Pour simplifier nous supposons rendrePour simplifier nous supposons rendreun booléen, mais le résultat pourrait, parun booléen, mais le résultat pourrait, parexemple, être le n-uplet solution, etc …exemple, être le n-uplet solution, etc …

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 130130

Back-track, code génériqueBack-track, code générique----------------------------------------------------------------------------------------------------------------------------------

int back_track (un_type situation)

{if ( decidable(situation) )

return( ca_vaut_tant(situation) );

else

...

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 131131

Back-track, code génériqueBack-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 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 132132

Back-track, code génériqueBack-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

...

}

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 133133

Back-track, code génériqueBack-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) );

}

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 134134

Back-track, code génériqueBack-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 arbreComme pour Fibonnacci, nous parcourons un arbre

imaginaire, qui ne sera jamais construit en tant que tel !imaginaire, qui ne sera jamais construit en tant que tel !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 135135

Back-track, toutes les solutionsBack-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 l’union de toutes les Nous construisons l’union de toutes les solutions.solutions.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 136136

Back-track, toutes les solutionsBack-track, toutes les solutions----------------------------------------------------------------------------------------------------------------------------------

set_un_type back_track_toutes (un_type situation)

{ ...

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 137137

Back-track, toutes les solutionsBack-track, toutes les solutions----------------------------------------------------------------------------------------------------------------------------------

set_un_type back_track_toutes (un_type situation)

{if ( decidable(situation) )

...

else

...

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 138138

Back-track, toutes les solutionsBack-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

...

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 139139

Back-track, toutes les solutionsBack-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)) );

}

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 140140

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

C h a n g e o n s d e s u j C h a n g e o n s d e s u j e t !e t !

A r b r e s d e j e u xA r b r e s d e j e u x

M I N I M A XM I N I M A X

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 141141

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Considérons un arbre dont :Considérons un arbre dont :

– les feuilles valent les feuilles valent VVrai ou rai ou FFauxaux– et les nœuds internes portent alternativement (depuis et les nœuds internes portent alternativement (depuis

la racine vers les feuilles) les connectives la racine vers les feuilles) les connectives etet et et ouou..

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 142142

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Considérons un arbre dont :Considérons un arbre dont :

– les feuilles valent les feuilles valent VVrai ou rai ou FFauxaux– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives etet et et ouou..

• Par réduction nous calculons une valeur pour la racine :Par réduction nous calculons une valeur pour la racine :

etet

ouou

etet

VV

FF etet

VV VVFF VV

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 143143

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Considérons un arbre dont :Considérons un arbre dont :

– les feuilles valent les feuilles valent VVrai ou rai ou FFauxaux– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives etet et et ouou..

• Par réduction nous calculons une valeur pour la racine :Par réduction nous calculons une valeur pour la racine :

etet

ouou

etet

VV

FF etet

VV VVFF VV

FF VV

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 144144

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Considérons un arbre dont :Considérons un arbre dont :

– les feuilles valent les feuilles valent VVrai ou rai ou FFauxaux– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives etet et et ouou..

• Par réduction nous calculons une valeur pour la racine :Par réduction nous calculons une valeur pour la racine :

etet

ouou

etet

VV

FF etet

VV VVFF VV

FF VV

VV

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 145145

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Considérons un arbre dont :Considérons un arbre dont :

– les feuilles valent les feuilles valent VVrai ou rai ou FFauxaux– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives etet et et ouou..

• Par réduction nous calculons une valeur pour la racine :Par réduction nous calculons une valeur pour la racine :

etet

ouou

etet

VV

FF etet

VV VVFF VV

FF VV

VV

VV

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 146146

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

Nous n’avons pas toujours besoin de parcourir tout l’arbre.Nous n’avons pas toujours besoin de parcourir tout l’arbre.

etet

ouou

etet

VV

FF etet

VV VVFF VV

FF VV

VV

VV

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 147147

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

Nous n’avons pas toujours besoin de parcourir tout l’arbre.Nous n’avons pas toujours besoin de parcourir tout l’arbre.

etet

ououVV

etet

VVVV

VV

VV

VV

?????? ??????

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 148148

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

Nous n’avons pas toujours besoin de parcourir tout l’arbre.Nous n’avons pas toujours besoin de parcourir tout l’arbre.

etet

ououVV

etet

VVVV

VV

VV

VV

?????? ??????

Ces sous-arbres n’ont aucuneCes sous-arbres n’ont aucuneincidence sur le résultat ! ! !incidence sur le résultat ! ! !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 149149

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le et et : :

etet

??FFVV

etet

??

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 150150

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le et et : :

etet

??FFVV

etet

??

donnedonne ?? donnedonneFF

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 151151

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le et et : :

etet

??FFVV

etet

??

donnedonne ?? donnedonneFF

• Règles pour le Règles pour le ou ou : :

ouou

??FFVV

ouou

??

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 152152

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le et et : :

etet

??FFVV

etet

??

donnedonne ?? donnedonneFF

• Règles pour le Règles pour le ou ou : :

ouou

??FFVV

ouou

??

donnedonne VV donnedonne??

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 153153

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le et et : :

etet

??FFVV

etet

??

donnedonne ?? donnedonneFF

• Règles pour le Règles pour le ou ou : :

ouou

??FFVV

ouou

??

donnedonne VV donnedonne??

On dit que l’onOn dit que l’on fait des coupes dans l’arbre. fait des coupes dans l’arbre.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 154154

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• On peut faire la substitution suivante, sans rien On peut faire la substitution suivante, sans rien changer aux comportements :changer aux comportements :

– V V devient devient 11

– F F devient devient 0 0

– et et devient devient min min

– ou ou devient devient max max

Les deux formulationsLes deux formulationssont isomorphes ! ! !sont isomorphes ! ! !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 155155

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Règles pour le Règles pour le min min : :

minmin

??0011

minmin

??

donnedonne ?? donnedonne 00

• Règles pour le Règles pour le max max : :

maxmax

??0011

maxmax

??

donnedonne 11 donnedonne??

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 156156

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Définition générale d’un arbre Minimax :Définition générale d’un arbre Minimax :

– les feuilles ont des valeurs entières (ou réelles)les feuilles ont des valeurs entières (ou réelles)– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives maxmax et et minmin..

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 157157

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Définition générale d’un arbre Minimax :Définition générale d’un arbre Minimax :

– les feuilles ont des valeurs entières (ou réelles)les feuilles ont des valeurs entières (ou réelles)– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives maxmax et et minmin..

• La valeur Minimax d’un arbre A vaut :La valeur Minimax d’un arbre A vaut :

– si A est une feuille, alors la valeur de cette feuille,si A est une feuille, alors la valeur de cette feuille,

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 158158

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Définition générale d’un arbre Minimax :Définition générale d’un arbre Minimax :

– les feuilles ont des valeurs entières (ou réelles)les feuilles ont des valeurs entières (ou réelles)– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives maxmax et et minmin..

• La valeur Minimax d’un arbre A vaut :La valeur Minimax d’un arbre A vaut :

– si A est une feuille, alors la valeur de cette feuille,si A est une feuille, alors la valeur de cette feuille,

– si A est un nœud interne de type si A est un nœud interne de type maxmax ayant des fils B ayant des fils B et C,et C,

alors le maximum des valeurs minimax de B et C,alors le maximum des valeurs minimax de B et C,

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 159159

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Définition générale d’un arbre Minimax :Définition générale d’un arbre Minimax :

– les feuilles ont des valeurs entières (ou réelles)les feuilles ont des valeurs entières (ou réelles)– et les nœuds internes portent alternativement (depuis la et les nœuds internes portent alternativement (depuis la

racine vers les feuilles) les connectives racine vers les feuilles) les connectives maxmax et et minmin..

• La valeur Minimax d’un arbre A vaut :La valeur Minimax d’un arbre A vaut :

– si A est une feuille, alors la valeur de cette feuille,si A est une feuille, alors la valeur de cette feuille,

– si A est un nœud interne de type si A est un nœud interne de type maxmax ayant des fils B et ayant des fils B et C,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 si A est un nœud interne de type minmin ayant des fils B et ayant des fils B et C,C,

alors le minimum des valeurs minimax de B et C.alors le minimum des valeurs minimax de B et C.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 160160

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

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) ) ) ) ; }

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 161161

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

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 d’arrêt est trivial !Le cas d’arrêt est trivial !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 162162

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

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) ) ) ) ; }

C’est assez logique !C’est assez logique !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 163163

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

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) ) ) ) ; }

C’est assez logique !C’est assez logique !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 164164

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

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) ) ) ) ; }

C’est assez logique !C’est assez logique !

CasCassymétrique !symétrique !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 165165

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 166166

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

33 11

33

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 167167

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

33 11

33Donc, Donc, MAX MAX joue sonjoue sonmeilleur choix.meilleur choix.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 168168

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

33 11

33Donc, Donc, MAX MAX joue sonjoue sonmeilleur choix.meilleur choix.

Et Et MIN MIN joue sajoue sameilleure réplique.meilleure réplique.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 169169

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

Ce choix pourrait êtreCe choix pourrait êtretentant pour tentant pour MAX MAX quiqui

espère obtenir 7 !espère obtenir 7 !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 170170

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

Ce choix pourrait êtreCe choix pourrait êtretentant pour tentant pour MAX MAX quiqui

espère obtenir 7 !espère obtenir 7 !

MIN MIN est très fort etest très fort etne concède que le minimum !ne concède que le minimum !

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 171171

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Les arbres Minimax servent dans les jeux :Les arbres Minimax servent dans les jeux :

– Je suis Je suis MAXMAX et je veux maximiser mon bénéfice ! et je veux maximiser mon bénéfice !

– Mon adversaire est Mon adversaire est MINMIN et veut minimiser mon et veut minimiser mon bénéfice !bénéfice !

maxmax

minmin

55

minmin

33 1177

33 11

33

Le chemin du minimax correspond à la fois à :Le chemin du minimax correspond à la fois à :

- la meilleure attaque de - la meilleure attaque de MAXMAX

- et à la meilleure riposte de - et à la meilleure riposte de MIN.MIN.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 172172

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Pourquoi construire un arbre minimax plutôt que Pourquoi construire un arbre minimax plutôt que d’évaluer tout de suite une position ?d’évaluer tout de suite une position ?

– Les fonctions d’évaluation sont peu précises !Les fonctions d’évaluation sont peu précises !– Minimax stabilise les résultats !Minimax stabilise les résultats !

4??4??

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 173173

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Pourquoi construire un arbre minimax plutôt que Pourquoi construire un arbre minimax plutôt que d’évaluer tout de suite une position ?d’évaluer tout de suite une position ?

– Les fonctions d’évaluation sont peu précises !Les fonctions d’évaluation sont peu précises !– Minimax stabilise les résultats !Minimax stabilise les résultats !

maxmax

minmin

55

minmin

33 1177

33 11

33

- 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.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 174174

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Minimax s’applique aux jeux :Minimax s’applique aux jeux :

– de somme nulle,de somme nulle,

– déterministes,déterministes,

– et d’information parfaite.et d’information parfaite.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 175175

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Minimax s’applique aux jeux :Minimax s’applique aux jeux :

– de somme nulle,de somme nulle,

– déterministes,déterministes,

– et d’information parfaite.et d’information parfaite.

Mon avantage est un inconvénientMon avantage est un inconvénientpour mon adversaire, et vice-versa.pour mon adversaire, et vice-versa.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 176176

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Minimax s’applique aux jeux :Minimax s’applique aux jeux :

– de somme nulle,de somme nulle,

– déterministes,déterministes,

– et d’information parfaite.et d’information parfaite.

Mon avantage est un inconvénientMon avantage est un inconvénientpour mon adversaire, et vice-versa.pour mon adversaire, et vice-versa.

Pas d’élément de chance commePas d’élément de chance commele résultat d’un lancer de dé.le résultat d’un lancer de dé.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 177177

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Minimax s’applique aux jeux :Minimax s’applique aux jeux :

– de somme nulle,de somme nulle,

– déterministes,déterministes,

– et d’information parfaite.et d’information parfaite.

Mon avantage est un inconvénientMon avantage est un inconvénientpour mon adversaire, et vice-versa.pour mon adversaire, et vice-versa.

Pas d’élément de chance commePas d’élément de chance commele résultat d’un lancer de dé.le résultat d’un lancer de dé.

Tous voient toute l’information,Tous voient toute l’information,contrairement aux jeux de cartescontrairement aux jeux de cartesoù la main est cachée.où la main est cachée.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 178178

MinimaxMinimax----------------------------------------------------------------------------------------------------------------------------------

• Minimax s’applique aux jeux :Minimax s’applique aux jeux :

– de somme nulle,de somme nulle,

– déterministes,déterministes,

– et d’information parfaite.et d’information parfaite.

Mon avantage est un inconvénientMon avantage est un inconvénientpour mon adversaire, et vice-versa.pour mon adversaire, et vice-versa.

Pas d’élément de chance pourPas d’élément de chance pourle résultat d’un lancer de dé.le résultat d’un lancer de dé.

Tous voient toute l’information,Tous voient toute l’information,contrairement aux jeux de cartecontrairement aux jeux de carteoù la main est cachée.où la main est cachée.

Exemples : les échecs, les dames, le go, …Exemples : les échecs, les dames, le go, …

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 179179

SynthèseSynthèse----------------------------------------------------------------------------------------------------------------------------------

• Parcours d’arbres.Parcours d’arbres.

• Modification d’arbres.Modification d’arbres.

• Induction sur la structure.Induction sur la structure.

• Back-Track.Back-Track.

• Minimax.Minimax.

13 novembre 200613 novembre 2006 Cours d'algorithmique 3 - IntranetCours d'algorithmique 3 - Intranet 180180

m E r C i e Tm E r C i e Tb O n N e J o U r N é b O n N e J o U r N é

E ! ! !E ! ! !

n ‘ O u B l I e Z p A s D en ‘ O u B l I e Z p A s D ep R é P a R e R v O sp R é P a R e R v O s

T D ! ! !T D ! ! !

Recommended