Upload
guilbert-tournier
View
104
Download
1
Embed Size (px)
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 ! ! !