Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme...

Preview:

Citation preview

Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1116 novembre 200616 novembre 2006

Cours d’AlgorithmiqueCours d’Algorithmique

L’algorithme alpha-beta.L’algorithme alpha-beta.Sous-arbres alpha et beta d’un arbre Sous-arbres alpha et beta d’un arbre

minimax et propriétés.minimax et propriétés.

Arbres de recherche équilibrés :Arbres de recherche équilibrés :la problématique, diverses solutions.la problématique, diverses solutions.

Recherche textuelle.Recherche textuelle.

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 22

• Trier et chercher,Trier et chercher, recherche textuellerecherche textuelle• Listes etListes et arbresarbres• Le back-trackLe back-track• Arbres équilibrésArbres équilibrés• Récursivité et induction sur la structureRécursivité et induction sur la structure• Divide and conquerDivide and conquer• Minimax,Minimax, alpha-betaalpha-beta• DérécursionDérécursion• Divers problèmes particuliersDivers problèmes particuliers• Logique de HoareLogique de Hoare• Programmation dynamiqueProgrammation dynamique• Complexité et calculabilitéComplexité et calculabilité

Les grandes lignes du coursLes grandes lignes du cours

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 33

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

??

55

• Nous parcourons le fils droit pour trouver une valeur Nous parcourons le fils droit pour trouver une valeur dans l’intervalle :dans l’intervalle :

[ 5 … +inf [[ 5 … +inf [

• Nous nous arrêtons dès que nous savons qu’elle sera Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! inférieure à 5 !

[ 5 … +inf [[ 5 … +inf [

minmin

33

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 44

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

??

55

• Nous parcourons le fils droit pour trouver une valeur Nous parcourons le fils droit pour trouver une valeur dans l’intervalle :dans l’intervalle :

[ 5 … +inf [[ 5 … +inf [

• Nous nous arrêtons dès que nous savons qu’elle sera Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! inférieure à 5 !

[ 5 … +inf [[ 5 … +inf [

minmin

77

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 55

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

[ 3 … +inf [[ 3 … +inf [

minmin

99

33

[ 3 … [ 3 … 9 ]9 ]

maxmax

??

[ 4[ 4 … … 9 ]9 ]

minmin

77

44

[ 4[ 4 … … 7 ]7 ]DiscussionDiscussionde la valeur dede la valeur de« ? » par rapport à« ? » par rapport àl’intervalle [ 4 … 7 ]. l’intervalle [ 4 … 7 ].

??

??

??

??

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 66

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

[ 3 … +inf [[ 3 … +inf [

minmin

99

33

[ 3 … [ 3 … 9 ]9 ]

maxmax

??

[ 4[ 4 … … 9 ]9 ]

minmin

77

[ 4[ 4 … … 7 ]7 ]DiscussionDiscussionde la valeur dede la valeur de« ? » par rapport à« ? » par rapport àl’intervalle [ 4 … 7 ]. l’intervalle [ 4 … 7 ].

??44

44

44

44

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 77

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

[ 3 … +inf [[ 3 … +inf [

minmin

99

33

[ 3 … [ 3 … 9 ]9 ]

maxmax

??

[ 4[ 4 … … 9 ]9 ]

minmin

[ 4[ 4 … … 7 ]7 ]DiscussionDiscussionde la valeur dede la valeur de« ? » par rapport à« ? » par rapport àl’intervalle [ 4 … 7 ]. l’intervalle [ 4 … 7 ].

77

77

77

77

77

44

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 88

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

xxx Traitement les fils de max

for ( « fils » parmi les fils de situation &

tantque alpha < beta )

alpha := max( alpha ,

alpha_beta( fils , not(max_ou_pas) ,

alpha , beta ) );

return( min(alpha , beta) );

Parcourons tous les fils, mais arrêtons-nousParcourons tous les fils, mais arrêtons-nousdès que alpha atteint beta !dès que alpha atteint beta !

alphaalphapeut grandir !peut grandir !

Rendre « alpha » ou bienRendre « alpha » ou bien« beta » si alpha > beta !« beta » si alpha > beta !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 99

alpha - betaalpha - beta----------------------------------------------------------------------------------------------------------------------------------

yyy Traitement les fils de min

for ( « fils » parmi les fils de situation &

tantque alpha < beta )

beta := min( beta ,

alpha_beta( fils , not(max_ou_pas) ,

alpha , beta ) );

return( max(alpha , beta) );

Parcourons tous les fils, mais arrêtons-nousParcourons tous les fils, mais arrêtons-nousdès que beta atteint alpha !dès que beta atteint alpha !

betabetapeut diminuer !peut diminuer !

Rendre « beta » ou bienRendre « beta » ou bien« alpha » si beta < alpha !« alpha » si beta < alpha !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1010

Arbre alphaArbre alpha----------------------------------------------------------------------------------------------------------------------------------

maxmax

minmin

33

minmin

22 7788

maxmax

minmin

55

minmin

33 1177

minminminmin

maxmax

33

maxmax

11 2266

maxmax

• Nous gardons tous les fils des Nous gardons tous les fils des min .min .

• Nous gardons un fils des Nous gardons un fils des max max (choisi au hasard).(choisi au hasard).

33Minimax = minimum ! ! !Minimax = minimum ! ! !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1111

Arbre betaArbre beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

minmin

33

minmin

22 7788

maxmax

minmin

55

minmin

33 1177

minminminmin

maxmax

33

maxmax

11 2266

maxmax

• Nous gardons tous les fils des Nous gardons tous les fils des max .max .

• Nous gardons un fils des Nous gardons un fils des min min (choisi au hasard).(choisi au hasard).

Minimax = maximum ! ! !Minimax = maximum ! ! ! 77

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1212

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• Pour tout arbre A ,Pour tout arbre A ,

– pour tout sous-arbre alpha de A , alpha( A ) ,pour tout sous-arbre alpha de A , alpha( A ) ,– pour tout sous-arbre beta de A , beta( A ) :pour tout sous-arbre beta de A , beta( A ) :

minimax ( alpha( A ) ) <= minimax ( A ) <= minimax ( beta( A ) )minimax ( alpha( A ) ) <= minimax ( A ) <= minimax ( beta( A ) )

• Pour tout arbre A ,Pour tout arbre A ,

– il existe un sous-arbre alpha de A , alpha_opt( A ) ,il existe un sous-arbre alpha de A , alpha_opt( A ) ,– il existe un sous-arbre beta de A , beta_opt( A ) :il existe un sous-arbre beta de A , beta_opt( A ) :

minimax ( alpha_opt( A ) ) = minimax ( A ) = minimax minimax ( alpha_opt( A ) ) = minimax ( A ) = minimax ( beta_opt( A ) )( beta_opt( A ) )

Les liens communs à alpha_opt( A ) et beta_opt( A )Les liens communs à alpha_opt( A ) et beta_opt( A )

correspondent au chemin minimax de A .correspondent au chemin minimax de A .

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1313

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

maxmax

minmin

33

minmin

22 7788

maxmax

minmin

55

minmin

33 1177

minminminmin

maxmax

33

maxmax

11 2266

maxmax

• Un arbre alpha optimalUn arbre alpha optimal..

• Un arbre beta optimal.Un arbre beta optimal.

• Le chemin minimax.Le chemin minimax.33

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1414

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• Preuve :Preuve :

• A est une feuille : alpha_opt( A ) = beta_opt( A ) = A , A est une feuille : alpha_opt( A ) = beta_opt( A ) = A , trivial !trivial !

• A est l’arbre ci-dessous avec B meilleur que C , i.e.A est l’arbre ci-dessous avec B meilleur que C , i.e.

minimax( A ) = minimax( B ) >= minimax( C ) :minimax( A ) = minimax( B ) >= minimax( C ) :

• Pour B , par hypothèse, de même pour C :Pour B , par hypothèse, de même pour C :

- minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax ( beta_opt( B ) )( beta_opt( B ) )

- Les liens communs entre alpha_opt( B ) et beta_opt( B ) Les liens communs entre alpha_opt( B ) et beta_opt( B ) correspondent au chemin minimax de B .correspondent au chemin minimax de B .

maxmax

BB CC

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1515

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• alpha_opt( A ) est l’arbre :alpha_opt( A ) est l’arbre :

– minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) )minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) )

= minimax( alpha_opt( A ) )= minimax( alpha_opt( A ) )

>= minimax( C )>= minimax( C )

• beta_opt( A ) est l’arbre :beta_opt( A ) est l’arbre :

– minimax( A ) = minimax( B ) = minimax( beta_opt( B ) )minimax( A ) = minimax( B ) = minimax( beta_opt( B ) )

= minimax( beta_opt( A ) )= minimax( beta_opt( A ) )

• Chemin minimax : l’arête verte plus le minimax dans B .Chemin minimax : l’arête verte plus le minimax dans B .

maxmax

alpha_opt(B)alpha_opt(B) CC

maxmax

beta_opt(B)beta_opt(B) beta_opt(C)beta_opt(C)

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1616

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• Preuve (suite) :Preuve (suite) :

• A est l’arbre ci-dessous avec B meilleur que C , i.e.A est l’arbre ci-dessous avec B meilleur que C , i.e.

minimax( A ) = minimax( B ) <= minimax( C ) :minimax( A ) = minimax( B ) <= minimax( C ) :

• Pour B , par hypothèse, de même pour C :Pour B , par hypothèse, de même pour C :

- minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax ( beta_opt( B ) )( beta_opt( B ) )

- Les liens communs entre alpha_opt( B ) et beta_opt( B ) Les liens communs entre alpha_opt( B ) et beta_opt( B ) correspondent au chemin minimax de B . correspondent au chemin minimax de B .

minmin

BB CC

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1717

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• alpha_opt( A ) est l’arbre :alpha_opt( A ) est l’arbre :

– minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) )minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) )

= minimax( alpha_opt( A ) )= minimax( alpha_opt( A ) )

• beta_opt( A ) est l’arbre :beta_opt( A ) est l’arbre :

– minimax( A ) = minimax( B ) = minimax( beta_opt( B ) )minimax( A ) = minimax( B ) = minimax( beta_opt( B ) )

= minimax( beta_opt( A ) )= minimax( beta_opt( A ) )

• Chemin minimax : l’arête verte plus le minimax dans B .Chemin minimax : l’arête verte plus le minimax dans B .

minmin

alpha_opt(B)alpha_opt(B)

minmin

beta_opt(B)beta_opt(B)

alpha_opt(C)alpha_opt(C)

CC

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1818

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• Théorème (exercice) :Théorème (exercice) :

– Si le chemin minimax de l’arbre A est le chemin le Si le chemin minimax de l’arbre A est le chemin le plus à gauche dans l’arbre, alorsplus à gauche dans l’arbre, alors

• alpha-beta parcourt exactement la superposition alpha-beta parcourt exactement la superposition d’un arbre alpha optimal et d’un arbre beta d’un arbre alpha optimal et d’un arbre beta optimal.optimal.

• Heuristique « meilleur d’abord » :Heuristique « meilleur d’abord » :

– Au moment de générer les fils du nœud père, il fautAu moment de générer les fils du nœud père, il faut

• essayer de les trier du (probablement) meilleur au essayer de les trier du (probablement) meilleur au (probablement) pire.(probablement) pire.

• Cela semble logique !Cela semble logique !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 1919

Arbre alpha et arbre betaArbre alpha et arbre beta----------------------------------------------------------------------------------------------------------------------------------

• Théorème :Théorème :

– Un arbre minimax de profondeur uniforme 2p Un arbre minimax de profondeur uniforme 2p vérifie :vérifie :

• Il possède 2 feuilles !Il possède 2 feuilles !

• Tout sous-arbre alpha ou beta qu’il contient a 2 Tout sous-arbre alpha ou beta qu’il contient a 2 feuilles !feuilles !

• Il faut inspecter au minimum 2 * 2 Il faut inspecter au minimum 2 * 2 -- 1 feuilles 1 feuilles pour déterminer la valeur minimax de cet arbre.pour déterminer la valeur minimax de cet arbre.

• Ceci correspond à la superposition d’un meilleur Ceci correspond à la superposition d’un meilleur sous-arbre alpha avec un meilleur sous-arbre sous-arbre alpha avec un meilleur sous-arbre beta .beta .

2p2p

pp

pp

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2020

Arbres de recherche équilibrésArbres de recherche équilibrés----------------------------------------------------------------------------------------------------------------------------------

• Arbre de recherche :Arbre de recherche :

– Les feuilles correspondent aux informations qui Les feuilles correspondent aux informations qui admettent un ordre, par exemple celui des entiers.admettent un ordre, par exemple celui des entiers.

– Les nœuds internes comportent une étiquette qui Les nœuds internes comportent une étiquette qui permet d’orienter la recherche, car :permet d’orienter la recherche, car :

• les valeurs accessibles dans le sous-arbre de gauche les valeurs accessibles dans le sous-arbre de gauche sont plus petites que l‘étiquette,sont plus petites que l‘étiquette,

• et celles de droite plus grandes ou égales.et celles de droite plus grandes ou égales.

• L’idée de la recherche par dichotomie est sous-L’idée de la recherche par dichotomie est sous-jacente !jacente !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2121

Arbres de recherche équilibrésArbres de recherche équilibrés----------------------------------------------------------------------------------------------------------------------------------

1010

1515

44

66

77

2424

1414

Etiquettes.Etiquettes.

Valeurs.Valeurs.

1616

1515int recherche ( int x , ptr_arbre arbre )

{if ( feuille( arbre ) )

return( valeur( arbre ) == x );

else

if ( x < etiquette( arbre ) )

return( recherche( x , fils_gauche( arbre ) ) ) ;

else

return( recherche( x , fils_droit( arbre ) ) ) ; }

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2222

Arbres de recherche équilibrésArbres de recherche équilibrés----------------------------------------------------------------------------------------------------------------------------------

• Complexité :Complexité :

– Recherche : profondeur de l’arbre.Recherche : profondeur de l’arbre.

– Insertion : profondeur de l’arbre.Insertion : profondeur de l’arbre.

– Suppression : profondeur de l’arbre.Suppression : profondeur de l’arbre.

• La profondeur est minimale siLa profondeur est minimale si

– l’arbre est équilibré, c’est-à-direl’arbre est équilibré, c’est-à-dire

– que toutes les feuilles sont +/- à la même profondeur !que toutes les feuilles sont +/- à la même profondeur !

• Pour un arbre équilibré avec « n » feuilles, nous Pour un arbre équilibré avec « n » feuilles, nous avons une profondeur de « log n ».avons une profondeur de « log n ».

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2323

Arbres de recherche équilibrésArbres de recherche équilibrés----------------------------------------------------------------------------------------------------------------------------------

• Complexité des arbres de recherche équilibrés :Complexité des arbres de recherche équilibrés :

– Tout en « log n ».Tout en « log n ».

• Complexité des tableaux triés :Complexité des tableaux triés :

– Recherche en « log n ».Recherche en « log n ».

– Insertion et suppression en « n ».Insertion et suppression en « n ».

• Complexité des listes triées :Complexité des listes triées :

– Tout en « n ».Tout en « n ».

• Hashage :Hashage :

– Comme pour les arbres, si c’est bien fait !Comme pour les arbres, si c’est bien fait !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2424

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Trois types de nœuds internes :Trois types de nœuds internes :

– binaires avec une étiquette pour les séparer,binaires avec une étiquette pour les séparer,

– ternaires avec deux étiquettes pour les séparer,ternaires avec deux étiquettes pour les séparer,

– quaternaires avec trois étiquettes pour les séparer.quaternaires avec trois étiquettes pour les séparer.

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2525

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Insertion d’une valeur « v » dans un tel arbre.Insertion d’une valeur « v » dans un tel arbre.

– Un nœud binaire devient ternaire :Un nœud binaire devient ternaire :

– Un nœud ternaire devient quaternaire :Un nœud ternaire devient quaternaire :

xx yy xx yyvv

xx yy zz xx yy zzvv

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2626

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Insertion d’une valeur « v » dans un tel arbre.Insertion d’une valeur « v » dans un tel arbre.

– Un nœud quaternaire pourrait être découpé comme suit Un nœud quaternaire pourrait être découpé comme suit ::

zz ttvv

xx yy ttzz

xx yy

Mais, nous accroissons la profondeur sansMais, nous accroissons la profondeur sanssavoir si c’est vraiment indispensable !savoir si c’est vraiment indispensable !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2727

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Insertion d’une valeur « v » dans un tel arbre.Insertion d’une valeur « v » dans un tel arbre.

– Une autre stratégie :Une autre stratégie :

xx yy ttzz

Il faut éclater ( x, y , z , t ) !Il faut éclater ( x, y , z , t ) !

Essayons de rattacher ( x , y ) et ( z , v , t ) commeEssayons de rattacher ( x , y ) et ( z , v , t ) commefrères sous le père de ( x , y , z , t ) !frères sous le père de ( x , y , z , t ) !

PèrePère

zz ttvvxx yy

Nous augmentons doncNous augmentons doncl’arité du père d’une unité !l’arité du père d’une unité !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2828

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Insertion d’une valeur « v » dans un tel arbre.Insertion d’une valeur « v » dans un tel arbre.

– Le problème est résolu, à moins que le père ne soit Le problème est résolu, à moins que le père ne soit quaternaire !quaternaire !

– Dans ce cas, nous recommençons récursivement pour le Dans ce cas, nous recommençons récursivement pour le père !père !

– Dans le pire des cas, nous devons remonter à la racine …Dans le pire des cas, nous devons remonter à la racine …

– et, si elle est quaternaire, l’éclater comme suit :et, si elle est quaternaire, l’éclater comme suit :

xx yy ttzz zz ttwwxx yy

et et ww

La profondeur de toutes les feuillesLa profondeur de toutes les feuillesaugmente alors en même temps !augmente alors en même temps !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 2929

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Suppression d’une valeur « v » dans un tel arbre.Suppression d’une valeur « v » dans un tel arbre.

– Un nœud quaternaire devient ternaire et un nœud Un nœud quaternaire devient ternaire et un nœud ternaire devient binaire!ternaire devient binaire!

– Problème pour les nœuds binaires ! Il y a deux cas à Problème pour les nœuds binaires ! Il y a deux cas à considérer.considérer.

– Un des frères est quaternaire :Un des frères est quaternaire :

aa bb ddccxx vv bb ddccxx aa

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3030

Arbres 2 - 3 - 4Arbres 2 - 3 - 4----------------------------------------------------------------------------------------------------------------------------------

• Suppression d’une valeur « v » dans un tel arbre.Suppression d’une valeur « v » dans un tel arbre.

– Aucun frère n’est quaternaire. Le voisin « x » de « v » est Aucun frère n’est quaternaire. Le voisin « x » de « v » est inséré chez un frère !inséré chez un frère !

– Nous diminuons l’arité du père et nous devons peut-être Nous diminuons l’arité du père et nous devons peut-être recommencer récursivement ! ! !recommencer récursivement ! ! !

bb ddccxx vv xx bb ddcc

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3131

Arbres red - blackArbres red - black----------------------------------------------------------------------------------------------------------------------------------

• Les arbres 2 – 3 – 4 peuvent être représentés à l’aide deLes arbres 2 – 3 – 4 peuvent être représentés à l’aide de

• nœuds binaires uniquement, nœuds binaires uniquement, en rajoutant une couleur ( red ou en rajoutant une couleur ( red ou black ).black ).

ou colorier les nœuds …ou colorier les nœuds …

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3232

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

• Sujet :Sujet :

– RechercherRechercher

• un pattern de longueur « m » : P[1] , … , P[m]un pattern de longueur « m » : P[1] , … , P[m]

• dans un texte de longueur « n » : T[1] , … , dans un texte de longueur « n » : T[1] , … , T[n].T[n].

• Recherche structurée :Recherche structurée :

– L’algorithme est plus difficile à développer.L’algorithme est plus difficile à développer.

– La complexité est plus petite.La complexité est plus petite.

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3333

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

Principe de cet algorithme :Principe de cet algorithme :

Echec ! ! !Echec ! ! !

Nous recommençons une caseNous recommençons une caseplus loin avec le pattern entier.plus loin avec le pattern entier.

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3434

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

i = 1 ;

j = 1 ;

repeter

si T[ i ] == P[ j ]

{i = i+1 ;

j = j+1 ; }

sinon

{i = i-j+2 ;

j = 1 ; }

jusqua ( j > m ) ou ( i > n ) ;

resultat = ( j > m , i-j+1 ) ;

Autre formulation :Autre formulation :

Initialisations !Initialisations !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3535

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

• Principe de Knuth – Morris - Pratt :Principe de Knuth – Morris - Pratt :

– Après un échec entre T [ i ] et P [ j ] :Après un échec entre T [ i ] et P [ j ] :

• nous restons sur T [ i ] ou nous avançons vers T nous restons sur T [ i ] ou nous avançons vers T [ i+1 ],[ i+1 ],

• nous restons sur P [ j ] ou nous reculons vers P [ j-k nous restons sur P [ j ] ou nous reculons vers P [ j-k ].].

• Conséquences :Conséquences :

– Nous n’avons pas besoin de mémoriser le tableau T !Nous n’avons pas besoin de mémoriser le tableau T !

– C’est idéal pour scruter des flux du genre satellite, ligne C’est idéal pour scruter des flux du genre satellite, ligne téléphonique, flux informatique, . . .téléphonique, flux informatique, . . .

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3636

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

Quelques cas de figure :Quelques cas de figure :

AA BB

XX

ii

AA BB

i+1i+1

11

11

YY

C’est en fait l’unique cas de figure où nous avançons dans T !C’est en fait l’unique cas de figure où nous avançons dans T !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3737

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

Quelques cas de figure :Quelques cas de figure :

AA BB

XX

ii

33

55

CC

AA BB

AA BB

AA BB

AA BB

CCAA BB

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3838

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

• Soit next [ 1 .. m ] :Soit next [ 1 .. m ] :

– next [ j ] est le point de reprise dans le pattern P next [ j ] est le point de reprise dans le pattern P après un échec en P [ j ] !après un échec en P [ j ] !

– next [ 1 ] = 1 !next [ 1 ] = 1 !

AA BB

XX

ii

22

44

CC

AA BB

AA BB

AA BB

AA

CCAA BB

next [ 4 ] = 2next [ 4 ] = 2

Nous restons sur i !Nous restons sur i !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 3939

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

i = 1 ;

j = 1 ;

repeter

si T[ i ] == P[ j ]

{i = i+1 ;

j = j+1 ; }

sinon

{si j == 1

i = i+1 ;

j = next[ j ] ; }

jusqua ( j > m ) ou ( i > n ) ;

resultat = ( j > m , i-j+1 ) ;

Nouvelle formulation !Nouvelle formulation !

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 4040

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

• Construisons next [ 1 .. m ] :Construisons next [ 1 .. m ] :

– next [ 1 ] = 1 !next [ 1 ] = 1 !

– next [ 2 ] = 1 !next [ 2 ] = 1 !

– next [ k ] pour k > 2 :next [ k ] pour k > 2 :

• Il faut trouver la longueur « l » du plus Il faut trouver la longueur « l » du plus long préfixe de P [ 1 .. k-1 ] qui est aussi long préfixe de P [ 1 .. k-1 ] qui est aussi suffixe de P [ 2 .. k-1 ],suffixe de P [ 2 .. k-1 ],

• et choisir next [ k ] = l+1.et choisir next [ k ] = l+1.

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 4141

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

calc_next ( k , P ) =

{i = 2 ;

j = 1 ;

repeter

si P[ i ] == P[ j ]

{i = i+1 ;

j = j+1 ; }

sinon

{i = i-j+2 ;

j = 1 ; }

jusqua ( i >= k ) ;

return( j ) ; }

Comment ça marche ?Comment ça marche ?

16 novembre 200616 novembre 2006 Cours d'algorithmique 4 - IntranetCours d'algorithmique 4 - Intranet 4242

Algorithme K - M - PAlgorithme K - M - P----------------------------------------------------------------------------------------------------------------------------------

next[ 1 ] = 1 ;

next[ 2 ] = 1 ;

i = 2 ;

j = 1 ;

repeter

si P[ i ] == P[ j ]

{i = i+1 ;

j = j+1 ;

next[ i ] = j ; }

sinon

{if ( j == 1 )

{i = i+1 ;

next[ i ] = 1 ; }

j = next[ j ] ; }

jusqua ( i >= m ) ;

Calcul de next [ 1 ]Calcul de next [ 1 ]à next [ m ] ! ! !à next [ m ] ! ! !