Cours d’Algorithmique L’algorithme alpha-beta. Sous-arbres alpha et beta d’un arbre minimax et propriétés. Arbres de recherche équilibrés : la problématique, diverses solutions. Recherche textuelle. 16 novembre 2006 Cours d'algorithmique 4 - Intranet 1 Les grandes lignes du cours • • • • • • • • • • • • Trier et chercher, recherche textuelle Listes et arbres Le back-track Arbres équilibrés Récursivité et induction sur la structure Divide and conquer Minimax, alpha-beta Dérécursion Divers problèmes particuliers Logique de Hoare Programmation dynamique Complexité et calculabilité 16 novembre 2006 Cours d'algorithmique 4 - Intranet 2 alpha - beta ----------------------------------------------------------------max [ 5 … +inf [ 5 min 3 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 3 alpha - beta ----------------------------------------------------------------max [ 5 … +inf [ 5 min 7 ? • Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : [ 5 … +inf [ • Nous nous arrêtons dès que nous savons qu’elle sera inférieure à 5 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 4 alpha - beta ----------------------------------------------------------------max ? [ 3 … +inf [ 3 min ? [3…9] max 9 ? [4…9] min 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. 16 novembre 2006 ? [4…7] 7 ? Cours d'algorithmique 4 - Intranet 5 alpha - beta ----------------------------------------------------------------max 4 [ 3 … +inf [ 3 min 4 [3…9] max 9 4 [4…9] min 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. 16 novembre 2006 ? [4…7] 7 ? Cours d'algorithmique 4 - Intranet 6 alpha - beta ----------------------------------------------------------------max 7 [ 3 … +inf [ 3 min 7 [3…9] max 9 7 [4…9] min 4 Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. 16 novembre 2006 7 [4…7] 7 ? Cours d'algorithmique 4 - Intranet 7 alpha - beta ----------------------------------------------------------------xxx Traitement les fils de max Parcourons tous les fils, mais arrêtons-nous dès que alpha atteint beta ! for ( « fils » parmi les fils de situation & tantque alpha < beta ) alpha := max( alpha , alpha peut grandir ! alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( min(alpha , beta) ); 16 novembre 2006 Rendre « alpha » ou bien « beta » si alpha > beta ! Cours d'algorithmique 4 - Intranet 8 alpha - beta ----------------------------------------------------------------yyy Traitement les fils de min Parcourons tous les fils, mais arrêtons-nous dès que beta atteint alpha ! for ( « fils » parmi les fils de situation & tantque alpha < beta ) beta := min( beta , beta peut diminuer ! alpha_beta( fils , not(max_ou_pas) , alpha , beta ) ); return( max(alpha , beta) ); 16 novembre 2006 Rendre « beta » ou bien « alpha » si beta < alpha ! Cours d'algorithmique 4 - Intranet 9 Arbre alpha ----------------------------------------------------------------- • Nous gardons tous les fils des min . • Nous gardons un fils des max (choisi au hasard). 3 max Minimax = minimum ! ! ! min min max min 5 min min 3 7 16 novembre 2006 max max 1 3 min 2 8 3 max 1 6 2 7 Cours d'algorithmique 4 - Intranet 10 Arbre beta ----------------------------------------------------------------- • Nous gardons tous les fils des max . • Nous gardons un fils des min (choisi au hasard). 7 Minimax = maximum ! ! ! max min min max min 5 min min 3 7 16 novembre 2006 max max 1 3 min 2 8 3 max 1 6 2 7 Cours d'algorithmique 4 - Intranet 11 Arbre alpha et arbre beta ----------------------------------------------------------------• Pour tout arbre A , – pour tout sous-arbre alpha de A , alpha( A ) , – pour tout sous-arbre beta de A , beta( A ) : minimax ( alpha( A ) ) <= minimax ( A ) <= minimax ( beta( A ) ) • Pour tout arbre A , – il existe un sous-arbre alpha de A , alpha_opt( A ) , – il existe un sous-arbre beta de A , beta_opt( A ) : minimax ( alpha_opt( A ) ) = minimax ( A ) = minimax ( beta_opt( A ) ) Les liens communs à alpha_opt( A ) et beta_opt( A ) correspondent au chemin minimax de A . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 12 Arbre alpha et arbre beta ----------------------------------------------------------------• Un arbre alpha optimal. • Un arbre beta optimal. • Le chemin minimax. 3 max min min max min 5 min min 3 7 16 novembre 2006 max max 1 3 min 2 8 3 max 1 6 2 7 Cours d'algorithmique 4 - Intranet 13 Arbre alpha et arbre beta ----------------------------------------------------------------• Preuve : • A est une feuille : alpha_opt( A ) = beta_opt( A ) = A , trivial ! • A est l’arbre ci-dessous avec B meilleur que C , i.e. minimax( A ) = minimax( B ) >= minimax( C ) : max B C • Pour B , par hypothèse, de même pour C : - minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax ( beta_opt( B ) ) - Les liens communs entre alpha_opt( B ) et beta_opt( B ) correspondent au chemin minimax de B . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 14 Arbre alpha et arbre beta ----------------------------------------------------------------• alpha_opt( A ) est l’arbre : max alpha_opt(B) C – minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) >= minimax( C ) • beta_opt( A ) est l’arbre : max beta_opt(B) beta_opt(C) – minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) • Chemin minimax : l’arête verte plus le minimax dans B . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 15 Arbre alpha et arbre beta ----------------------------------------------------------------• Preuve (suite) : • A est l’arbre ci-dessous avec B meilleur que C , i.e. minimax( A ) = minimax( B ) <= minimax( C ) : min B C • Pour B , par hypothèse, de même pour C : - minimax ( alpha_opt( B ) ) = minimax ( B ) = minimax ( beta_opt( B ) ) - Les liens communs entre alpha_opt( B ) et beta_opt( B ) correspondent au chemin minimax de B . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 16 Arbre alpha et arbre beta ----------------------------------------------------------------• alpha_opt( A ) est l’arbre : min alpha_opt(B) alpha_opt(C) – minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) • beta_opt( A ) est l’arbre : min beta_opt(B) C – minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) • Chemin minimax : l’arête verte plus le minimax dans B . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 17 Arbre alpha et arbre beta ----------------------------------------------------------------• Théorème (exercice) : – Si le chemin minimax de l’arbre A est le chemin le plus à gauche dans l’arbre, alors • alpha-beta parcourt exactement la superposition d’un arbre alpha optimal et d’un arbre beta optimal. • Heuristique « meilleur d’abord » : – Au moment de générer les fils du nœud père, il faut • essayer de les trier du (probablement) meilleur au (probablement) pire. • Cela semble logique ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 18 Arbre alpha et arbre beta ----------------------------------------------------------------• Théorème : – Un arbre minimax de profondeur uniforme 2p vérifie : • Il possède 2 2p feuilles ! • Tout sous-arbre alpha ou beta qu’il contient a 2 p feuilles ! • Il faut inspecter au minimum 2 * 2 p - 1 feuilles pour déterminer la valeur minimax de cet arbre. • Ceci correspond à la superposition d’un meilleur sous-arbre alpha avec un meilleur sous-arbre beta . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 19 Arbres de recherche équilibrés ----------------------------------------------------------------• Arbre de recherche : – Les feuilles correspondent aux informations qui admettent un ordre, par exemple celui des entiers. – Les nœuds internes comportent une étiquette qui permet d’orienter la recherche, car : • les valeurs accessibles dans le sous-arbre de gauche sont plus petites que l‘étiquette, • et celles de droite plus grandes ou égales. • L’idée de la recherche par dichotomie est sous-jacente ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 20 Arbres de recherche équilibrés ----------------------------------------------------------------10 Etiquettes. 6 4 15 7 int recherche ( int x , ptr_arbre arbre ) {if ( feuille( arbre ) ) return( valeur( arbre ) == x ); 16 14 15 24 Valeurs. else if ( x < etiquette( arbre ) ) return( recherche( x , fils_gauche( arbre ) ) ) ; else return( recherche( x , fils_droit( arbre ) ) ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet 21 Arbres de recherche équilibrés ----------------------------------------------------------------• Complexité : – Recherche : profondeur de l’arbre. – Insertion : profondeur de l’arbre. – Suppression : profondeur de l’arbre. • La profondeur est minimale si – l’arbre est équilibré, c’est-à-dire – que toutes les feuilles sont +/- à la même profondeur ! • Pour un arbre équilibré avec « n » feuilles, nous avons une profondeur de « log n ». 16 novembre 2006 Cours d'algorithmique 4 - Intranet 22 Arbres de recherche équilibrés ----------------------------------------------------------------• Complexité des arbres de recherche équilibrés : – Tout en « log n ». • Complexité des tableaux triés : – Recherche en « log n ». – Insertion et suppression en « n ». • Complexité des listes triées : – Tout en « n ». • Hashage : – Comme pour les arbres, si c’est bien fait ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 23 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Trois types de nœuds internes : – binaires avec une étiquette pour les séparer, – ternaires avec deux étiquettes pour les séparer, – quaternaires avec trois étiquettes pour les séparer. 16 novembre 2006 Cours d'algorithmique 4 - Intranet 24 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Insertion d’une valeur « v » dans un tel arbre. – Un nœud binaire devient ternaire : x y x v y – Un nœud ternaire devient quaternaire : x 16 novembre 2006 y z x y Cours d'algorithmique 4 - Intranet v z 25 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Insertion d’une valeur « v » dans un tel arbre. – Un nœud quaternaire pourrait être découpé comme suit : Mais, nous accroissons la profondeur sans savoir si c’est vraiment indispensable ! x y z t x 16 novembre 2006 y Cours d'algorithmique 4 - Intranet z v t 26 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Insertion d’une valeur « v » dans un tel arbre. – Une autre stratégie : Nous augmentons donc l’arité du père d’une unité ! Père x y z t Il faut éclater ( x, y , z , t ) ! x y z v t Essayons de rattacher ( x , y ) et ( z , v , t ) comme frères sous le père de ( x , y , z , t ) ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 27 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Insertion d’une valeur « v » dans un tel arbre. – Le problème est résolu, à moins que le père ne soit quaternaire ! – Dans ce cas, nous recommençons récursivement pour le père ! – Dans le pire des cas, nous devons remonter à la racine … – et, si elle est quaternaire, l’éclater comme suit : La profondeur de toutes les feuilles augmente alors en même temps ! et w x y z 16 novembre 2006 t x Cours d'algorithmique 4 - Intranet y z w t 28 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Suppression d’une valeur « v » dans un tel arbre. – Un nœud quaternaire devient ternaire et un nœud ternaire devient binaire! – Problème pour les nœuds binaires ! Il y a deux cas à considérer. – Un des frères est quaternaire : x v 16 novembre 2006 a b c d x Cours d'algorithmique 4 - Intranet a b c d 29 Arbres 2 - 3 - 4 ----------------------------------------------------------------• Suppression d’une valeur « v » dans un tel arbre. – Aucun frère n’est quaternaire. Le voisin « x » de « v » est inséré chez un frère ! – Nous diminuons l’arité du père et nous devons peut-être recommencer récursivement ! ! ! x v 16 novembre 2006 b c d Cours d'algorithmique 4 - Intranet x b c d 30 Arbres red - black ----------------------------------------------------------------• Les arbres 2 – 3 – 4 peuvent être représentés à l’aide de • nœuds binaires uniquement, en rajoutant une couleur ( red ou black ). ou colorier les nœuds … 16 novembre 2006 Cours d'algorithmique 4 - Intranet 31 Algorithme K - M - P ----------------------------------------------------------------• Sujet : – • Rechercher • un pattern de longueur « m » : P[1] , … , P[m] • dans un texte de longueur « n » : T[1] , … , T[n]. Recherche structurée : – L’algorithme est plus difficile à développer. – La complexité est plus petite. 16 novembre 2006 Cours d'algorithmique 4 - Intranet 32 Algorithme K - M - P ----------------------------------------------------------------Principe de cet algorithme : Echec ! ! ! Nous recommençons une case plus loin avec le pattern entier. 16 novembre 2006 Cours d'algorithmique 4 - Intranet 33 Algorithme K - M - P ----------------------------------------------------------------Autre formulation : i = 1 ; Initialisations ! 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 ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet 34 Algorithme K - M - P ----------------------------------------------------------------• Principe de Knuth – Morris - Pratt : – • Après un échec entre T [ i ] et P [ j ] : • nous restons sur T [ i ] ou nous avançons vers T [ i+1 ], • nous restons sur P [ j ] ou nous reculons vers P [ j-k ]. Conséquences : – Nous n’avons pas besoin de mémoriser le tableau T ! – C’est idéal pour scruter des flux du genre satellite, ligne téléphonique, flux informatique, . . . 16 novembre 2006 Cours d'algorithmique 4 - Intranet 35 Algorithme K - M - P ----------------------------------------------------------------Quelques cas de figure : 1 A B X Y i i+1 A B 1 C’est en fait l’unique cas de figure où nous avançons dans T ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet 36 Algorithme K - M - P ----------------------------------------------------------------Quelques cas de figure : 5 A B A B C A B A B X i A B A B C 3 16 novembre 2006 Cours d'algorithmique 4 - Intranet 37 Algorithme K - M - P ----------------------------------------------------------------• Soit next [ 1 .. m ] : – next [ j ] est le point de reprise dans le pattern P après un échec en P [ j ] ! – next [ 1 ] = 1 ! 4 A B A B A B A X i next [ 4 ] = 2 Nous restons sur i ! 16 novembre 2006 C A Cours d'algorithmique 4 - Intranet B A B C 2 38 Algorithme K - M - P ----------------------------------------------------------------i = 1 ; Nouvelle formulation ! 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 ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet 39 Algorithme K - M - P ----------------------------------------------------------------• Construisons next [ 1 .. m ] : – next [ 1 ] = 1 ! – next [ 2 ] = 1 ! – next [ k ] pour k > 2 : • Il faut trouver la longueur « l » du plus long préfixe de P [ 1 .. k-1 ] qui est aussi suffixe de P [ 2 .. k-1 ], • et choisir next [ k ] = l+1. 16 novembre 2006 Cours d'algorithmique 4 - Intranet 40 Algorithme K - M - P ----------------------------------------------------------------calc_next ( k , P ) = Comment ça marche ? {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 ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet 41 Algorithme K - M - P ----------------------------------------------------------------next[ 1 ] = 1 ; next[ 2 ] = 1 ; i = 2 ; Calcul de next [ 1 ] à next [ m ] ! ! ! 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 16 novembre 2006 ( i >= m ) ; Cours d'algorithmique 4 - Intranet 42