Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
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
2
Présentation générale
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 Cours d'algorithmique
3
Cours d'algorithmique 4 - Intranet
alpha - beta A R B R E A L P H A - B E T A 16 novembre 2006 Cours d'algorithmique 4 - Intranet
4
Cours d'algorithmique 4 - Intranet
alpha - beta max 5 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
5
Cours d'algorithmique 4 - Intranet
alpha - beta max 5 ? 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
6
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 5 … +inf [ 5 ? 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
7
Cours d'algorithmique 4 - Intranet
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
8
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 5 … +inf [ 5 min Coupe ! 3 < 5 !!! 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
9
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 5 … +inf [ 5 min Poursuite! 7 > 5 !!! 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
10
Cours d'algorithmique 4 - Intranet
alpha - beta min 3 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
11
Cours d'algorithmique 4 - Intranet
alpha - beta min 3 ? Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
12
Cours d'algorithmique 4 - Intranet
alpha - beta min ] -inf … 3 ] 3 ? Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
13
Cours d'algorithmique 4 - Intranet
alpha - beta min ] -inf … 3 ] 3 max 5 ? Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
14
Cours d'algorithmique 4 - Intranet
alpha - beta min ] -inf … 3 ] 3 max Coupe ! 5 > 3 !!! 5 ? Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
15
Cours d'algorithmique 4 - Intranet
alpha - beta min ] -inf … 3 ] 3 max Poursuite! 1 < 3 !!! 1 ? Nous parcourons le fils droit pour trouver une valeur dans l’intervalle : ] -inf … 3 ] Nous nous arrêtons dès que nous savons qu’elle sera supérieure à 3 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
16
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
17
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
18
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
19
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
20
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ [ a , b ] 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
21
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ [ a , b ] 3 min a est la borne minimale garantie ! a grandit seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
22
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ [ a , b ] 3 min a est la borne minimale garantie ! a grandit seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
23
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ [ a , b ] 3 min b est la borne maximale possible ! b diminue seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
24
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ [ a , b ] 3 min b est la borne maximale possible ! b diminue seulement … [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
25
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
26
Cours d'algorithmique 4 - Intranet
alpha - beta ? max [ 3 … +inf [ ? 3 min [ 3 … 9 ] ? 9 max [ 4 … 9 ] ? 4 min Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. 4 <= ? <= 7 [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
27
Cours d'algorithmique 4 - Intranet
alpha - beta ? max [ 3 … +inf [ ? 3 min [ 3 … 9 ] ? 9 max [ 4 … 9 ] ? 4 min Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. 4 <= ? <= 7 [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
28
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] ? 4 min Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. ? <= 4 [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
29
Cours d'algorithmique 4 - Intranet
alpha - beta 4 max [ 3 … +inf [ 4 3 min [ 3 … 9 ] 4 9 max [ 4 … 9 ] 4 min ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. ? < 4 [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
30
Cours d'algorithmique 4 - Intranet
alpha - beta 4 max [ 3 … +inf [ 4 3 min [ 3 … 9 ] 4 9 max [ 4 … 9 ] 4 min ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. ? < 4 [ 4 … 7 ] 7 ? Fail Low 16 novembre 2006 Cours d'algorithmique 4 - Intranet
31
Cours d'algorithmique 4 - Intranet
alpha - beta max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 max [ 4 … 9 ] 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
32
Cours d'algorithmique 4 - Intranet
alpha - beta 7 max [ 3 … +inf [ 7 3 min [ 3 … 9 ] 7 9 max [ 4 … 9 ] 7 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
33
Cours d'algorithmique 4 - Intranet
alpha - beta 7 max [ 3 … +inf [ 7 3 min [ 3 … 9 ] 7 9 max [ 4 … 9 ] 7 4 min 7 < ? Discussion de la valeur de « ? » par rapport à l’intervalle [ 4 … 7 ]. [ 4 … 7 ] 7 ? Fail High 16 novembre 2006 Cours d'algorithmique 4 - Intranet
34
Cours d'algorithmique 4 - Intranet
alpha - beta int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx yyy } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
35
Cours d'algorithmique 4 - Intranet
alpha - beta int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx yyy } Cas d’arrêt : Nous rendons la valeur de la situation ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
36
Cours d'algorithmique 4 - Intranet
alpha - beta int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx yyy } Le cas max ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
37
Cours d'algorithmique 4 - Intranet
alpha - beta int alpha_beta ( un_type situation , int max_ou_pas , int alpha , int beta ) {if ( est_feuille(situation) ) return( valeur(situation) ) ; else if ( max_ou_pas ) xxx yyy } Le cas min ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
38
Cours d'algorithmique 4 - Intranet
alpha - 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) ); 16 novembre 2006 Cours d'algorithmique 4 - Intranet
39
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que alpha atteint beta ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
40
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que alpha atteint beta ! alpha peut grandir ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
41
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que alpha atteint beta ! alpha peut grandir ! Rendre « alpha » ou bien « beta » si alpha > beta ! a <= b 16 novembre 2006 Cours d'algorithmique 4 - Intranet
42
Cours d'algorithmique 4 - Intranet
alpha - 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) ); 16 novembre 2006 Cours d'algorithmique 4 - Intranet
43
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que beta atteint alpha ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
44
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que beta atteint alpha ! beta peut diminuer ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
45
Cours d'algorithmique 4 - Intranet
alpha - 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-nous dès que beta atteint alpha ! beta peut diminuer ! Rendre « beta » ou bien « alpha » si beta < alpha ! a <= b 16 novembre 2006 Cours d'algorithmique 4 - Intranet
46
Cours d'algorithmique 4 - Intranet
Arbre alpha A R B R E A L P H A 16 novembre 2006 Cours d'algorithmique 4 - Intranet
47
Cours d'algorithmique 4 - Intranet
alpha - beta max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
48
Cours d'algorithmique 4 - Intranet
Arbre alpha Nous gardons tous les fils des min . Nous gardons un fils des max (choisi au hasard). max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
49
Cours d'algorithmique 4 - Intranet
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 max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
50
Cours d'algorithmique 4 - Intranet
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 max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
51
Cours d'algorithmique 4 - Intranet
Arbre alpha Un autre arbre alpha. max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
52
Cours d'algorithmique 4 - Intranet
Arbre alpha Un autre arbre alpha. 1 max Minimax = minimum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
53
Cours d'algorithmique 4 - Intranet
Arbre alpha A R B R E B E T A 16 novembre 2006 Cours d'algorithmique 4 - Intranet
54
Cours d'algorithmique 4 - Intranet
Arbre beta Nous gardons tous les fils des max . Nous gardons un fils des min (choisi au hasard). max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
55
Cours d'algorithmique 4 - Intranet
Arbre beta Nous gardons tous les fils des max . Nous gardons un fils des min (choisi au hasard). 7 max Minimax = maximum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
56
Cours d'algorithmique 4 - Intranet
Arbre beta Nous gardons tous les fils des max . Nous gardons un fils des min (choisi au hasard). 7 max Minimax = maximum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
57
Cours d'algorithmique 4 - Intranet
Arbre beta Un autre arbre beta. max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
58
Cours d'algorithmique 4 - Intranet
Arbre beta Un autre arbre beta. 8 max Minimax = maximum ! ! ! min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
59
Cours d'algorithmique 4 - Intranet
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 ) ) Exercice ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
60
Cours d'algorithmique 4 - Intranet
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 ) ) 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 . Exercice 16 novembre 2006 Cours d'algorithmique 4 - Intranet
61
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Un arbre alpha optimal. 3 max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
62
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Un arbre beta optimal. 3 max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
63
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Un arbre alpha optimal. Un arbre beta optimal. Le chemin minimax. 3 max min min max max max max min min min min 3 1 6 2 5 3 7 1 3 2 8 7 16 novembre 2006 Cours d'algorithmique 4 - Intranet
64
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Preuve : A est une feuille : alpha_opt( A ) = beta_opt( A ) = A , trivial ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
65
Cours d'algorithmique 4 - Intranet
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 16 novembre 2006 Cours d'algorithmique 4 - Intranet
66
Cours d'algorithmique 4 - Intranet
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 ) : 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 . max B C 16 novembre 2006 Cours d'algorithmique 4 - Intranet
67
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) >= minimax( C ) max alpha_opt(B) C 16 novembre 2006 Cours d'algorithmique 4 - Intranet
68
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) >= minimax( C ) beta_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) max alpha_opt(B) C max beta_opt(B) beta_opt(C) 16 novembre 2006 Cours d'algorithmique 4 - Intranet
69
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) >= minimax( C ) beta_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) Chemin minimax : l’arête verte plus le minimax dans B . max alpha_opt(B) C max beta_opt(B) beta_opt(C) 16 novembre 2006 Cours d'algorithmique 4 - Intranet
70
Cours d'algorithmique 4 - Intranet
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 ) : 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 . min B C 16 novembre 2006 Cours d'algorithmique 4 - Intranet
71
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) min alpha_opt(B) alpha_opt(C) 16 novembre 2006 Cours d'algorithmique 4 - Intranet
72
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) beta_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) min alpha_opt(B) alpha_opt(C) min beta_opt(B) C 16 novembre 2006 Cours d'algorithmique 4 - Intranet
73
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta alpha_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( alpha_opt( B ) ) = minimax( alpha_opt( A ) ) beta_opt( A ) est l’arbre : minimax( A ) = minimax( B ) = minimax( beta_opt( B ) ) = minimax( beta_opt( A ) ) Chemin minimax : l’arête verte plus le minimax dans B . min alpha_opt(B) alpha_opt(C) min beta_opt(B) C 16 novembre 2006 Cours d'algorithmique 4 - Intranet
74
Cours d'algorithmique 4 - Intranet
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. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
75
Cours d'algorithmique 4 - Intranet
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
76
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Théorème : Un arbre minimax de profondeur uniforme 2p vérifie : Il possède feuilles ! Tout sous-arbre alpha ou beta qu’il contient a feuilles ! Il faut inspecter au minimum 2 * 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 . 2p p p 16 novembre 2006 Cours d'algorithmique 4 - Intranet
77
Cours d'algorithmique 4 - Intranet
Arbre alpha et arbre beta Parcours de l’arbre minimax optimal : C’est un parcours « best-first » l’ordre de parcours dépend de la « valeur » des noeuds et non de l’ordre de filiation. L’algorithme SSS* (lire : SSS star) de Stockman. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
78
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés C h a n g e o n s d e s u j e t ! A R B R E S D E R E C H E R C H E E Q U I L I B R E S ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
79
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés Arbre de recherche : Les feuilles correspondent aux informations qui admettent un ordre, par exemple celui des entiers. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
80
Cours d'algorithmique 4 - Intranet
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. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
81
Cours d'algorithmique 4 - Intranet
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
82
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Etiquettes. 6 15 4 7 14 16 15 24 Valeurs. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
83
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Etiquettes. 6 15 4 7 14 16 int recherche ( int x , ptr_arbre arbre ) {if ( feuille( arbre ) ) return( valeur( arbre ) == x ); else if ( x < etiquette( arbre ) ) return( recherche( x , fils_gauche( arbre ) ) ) ; return( recherche( x , fils_droit( arbre ) ) ) ; } 15 24 Valeurs. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
84
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Etiquettes. 6 15 4 7 14 16 int recherche ( int x , ptr_arbre arbre ) {if ( feuille( arbre ) ) return( valeur( arbre ) == x ); else if ( x < etiquette( arbre ) ) return( recherche( x , fils_gauche( arbre ) ) ) ; return( recherche( x , fils_droit( arbre ) ) ) ; } 15 24 Valeurs. Trivial ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
85
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Etiquettes. 6 15 4 7 14 16 int recherche ( int x , ptr_arbre arbre ) {if ( feuille( arbre ) ) return( valeur( arbre ) == x ); else if ( x < etiquette( arbre ) ) return( recherche( x , fils_gauche( arbre ) ) ) ; return( recherche( x , fils_droit( arbre ) ) ) ; } 15 24 Valeurs. A gauche ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
86
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Etiquettes. 6 15 4 7 14 16 int recherche ( int x , ptr_arbre arbre ) {if ( feuille( arbre ) ) return( valeur( arbre ) == x ); else if ( x < etiquette( arbre ) ) return( recherche( x , fils_gauche( arbre ) ) ) ; return( recherche( x , fils_droit( arbre ) ) ) ; } 15 24 Valeurs. A gauche ! ! ! A droite ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
87
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés Complexité : Recherche : profondeur de l’arbre. Insertion : profondeur de l’arbre. Suppression : profondeur de l’arbre. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
88
Cours d'algorithmique 4 - Intranet
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 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
89
Cours d'algorithmique 4 - Intranet
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
90
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés Complexité des arbres de recherche équilibrés : Tout en « log n ». 16 novembre 2006 Cours d'algorithmique 4 - Intranet
91
Cours d'algorithmique 4 - Intranet
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 ». 16 novembre 2006 Cours d'algorithmique 4 - Intranet
92
Cours d'algorithmique 4 - Intranet
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 ». 16 novembre 2006 Cours d'algorithmique 4 - Intranet
93
Cours d'algorithmique 4 - Intranet
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
94
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 Si l’arbre est très déséquilibré : Tout en « n ». 7 15 14 16 26 15 24 54 16 novembre 2006 Cours d'algorithmique 4 - Intranet
95
Cours d'algorithmique 4 - Intranet
Arbres de recherche équilibrés 10 15 24 26 7 54 14 16 Si l’arbre est très déséquilibré : Tout en « n ». Comme pour une liste : 10 15 24 26 7 54 14 16 16 novembre 2006 Cours d'algorithmique 4 - Intranet
96
Cours d'algorithmique 4 - Intranet
Maintien de l’équilibre Les insertions et suppressions peuvent casser l’équilibre : Situation équilibrée 10 6 15 4 7 14 15 16 novembre 2006 Cours d'algorithmique 4 - Intranet
97
Cours d'algorithmique 4 - Intranet
Maintien de l’équilibre Les insertions et suppressions peuvent casser l’équilibre : 10 Ajout de l’élément 24, l’équilibre est sauvegardé ! 6 15 4 7 14 16 15 24 16 novembre 2006 Cours d'algorithmique 4 - Intranet
98
Cours d'algorithmique 4 - Intranet
Maintien de l’équilibre Les insertions et suppressions peuvent casser l’équilibre : Suppression de l’élément 7 : L’équilibre est cassé! 10 15 4 14 16 15 24 16 novembre 2006 Cours d'algorithmique 4 - Intranet
99
Cours d'algorithmique 4 - Intranet
Arbres A R B R E S 16 novembre 2006 Cours d'algorithmique 4 - Intranet
100
Cours d'algorithmique 4 - Intranet
Arbres 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
101
Cours d'algorithmique 4 - Intranet
Arbres Insertion d’une valeur « v » dans un tel arbre. Un nœud binaire devient ternaire : Un nœud ternaire devient quaternaire : x y x v y x y z x y v z 16 novembre 2006 Cours d'algorithmique 4 - Intranet
102
Cours d'algorithmique 4 - Intranet
Arbres Insertion d’une valeur « v » dans un tel arbre. Un nœud quaternaire pourrait être découpé comme suit : x y z t x y z v t 16 novembre 2006 Cours d'algorithmique 4 - Intranet
103
Cours d'algorithmique 4 - Intranet
Arbres 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 y z v t 16 novembre 2006 Cours d'algorithmique 4 - Intranet
104
Cours d'algorithmique 4 - Intranet
Arbres Insertion d’une valeur « v » dans un tel arbre. Une autre stratégie : x y z t Il faut éclater ( x, y , z , 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
105
Cours d'algorithmique 4 - Intranet
Arbres Insertion d’une valeur « v » dans un tel arbre. Une autre stratégie : Père x y z t Il faut éclater ( x, y , z , 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
106
Cours d'algorithmique 4 - Intranet
Arbres Insertion d’une valeur « v » dans un tel arbre. Une autre stratégie : Père x y z t x y z v t Il faut éclater ( x, y , z , 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
107
Cours d'algorithmique 4 - Intranet
Arbres 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 x y z v t Il faut éclater ( x, y , z , 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
108
Cours d'algorithmique 4 - Intranet
Arbres 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 … 16 novembre 2006 Cours d'algorithmique 4 - Intranet
109
Cours d'algorithmique 4 - Intranet
Arbres 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 nouvelle racine ! La racine ! et w x y z t x y z w t 16 novembre 2006 Cours d'algorithmique 4 - Intranet
110
Cours d'algorithmique 4 - Intranet
Arbres 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 t x y z w t 16 novembre 2006 Cours d'algorithmique 4 - Intranet
111
Cours d'algorithmique 4 - Intranet
Arbres 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. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
112
Cours d'algorithmique 4 - Intranet
Arbres 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 a b c d x a b c d 16 novembre 2006 Cours d'algorithmique 4 - Intranet
113
Cours d'algorithmique 4 - Intranet
Arbres 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 b c d x b c d 16 novembre 2006 Cours d'algorithmique 4 - Intranet
114
Cours d'algorithmique 4 - Intranet
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 ). 16 novembre 2006 Cours d'algorithmique 4 - Intranet
115
Cours d'algorithmique 4 - Intranet
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 ). 16 novembre 2006 Cours d'algorithmique 4 - Intranet
116
Cours d'algorithmique 4 - Intranet
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 ). 16 novembre 2006 Cours d'algorithmique 4 - Intranet
117
Cours d'algorithmique 4 - Intranet
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 ). 16 novembre 2006 Cours d'algorithmique 4 - Intranet
118
Cours d'algorithmique 4 - Intranet
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
119
Cours d'algorithmique 4 - Intranet
Arbres red - black L’équilibre des arbres red – black est maintenu à l’aide de : la rotation gauche : la rotation droite : 16 novembre 2006 Cours d'algorithmique 4 - Intranet
120
Cours d'algorithmique 4 - Intranet
Arbres red - black L’équilibre des arbres red – black est maintenu à l’aide de : la rotation gauche : la rotation droite : x y Si « a » n’est pas assez profond ! a y x c b c a b 16 novembre 2006 Cours d'algorithmique 4 - Intranet
121
Cours d'algorithmique 4 - Intranet
Arbres red - black L’équilibre des arbres red – black est maintenu à l’aide de : la rotation gauche : la rotation droite : x y Si « a » n’est pas assez profond ! a y x c b c a b x y a b c a b c x y Si « c » n’est pas assez profond ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
122
Cours d'algorithmique 4 - Intranet
Arbres AVL Une autre solution : Les AVL, c’est-à-dire des arbres dont les profondeurs des sous-arbres gauche et droit diffèrent d’au plus une unité, quel que soit le nœud considéré. L’équilibre est maintenu à l’aide des opérations de rotation gauche ou droite. Le détail sous forme du 3e devoir. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
123
Cours d'algorithmique 4 - Intranet
Recherche textuelle C h a n g e o n s d e s u j e t ! L ‘ A L G O R I T H M E D E K N U T H - M O R R I S E T P R A T T ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
124
Cours d'algorithmique 4 - Intranet
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
125
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Premier algorithme : trouve = false ; for i = 0 to n-m while not( trouve ) {trouve = true ; for j = 1 to m while trouve trouve = T[ i+j ] == P[ j ] ; i = i + 1 ; } resultat = ( trouve , i ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet
126
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Premier algorithme : trouve = false ; for i = 0 to n-m while not( trouve ) {trouve = true ; for j = 1 to m while trouve trouve = T[ i+j ] == P[ j ] ; i = i + 1 ; } resultat = ( trouve , i ) ; Finalement, nous dirons si nous avons trouvé ou non, et où ça ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
127
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Premier algorithme : trouve = false ; for i = 0 to n-m while not( trouve ) {trouve = true ; for j = 1 to m while trouve trouve = T[ i+j ] == P[ j ] ; i = i + 1 ; } resultat = ( trouve , i ) ; Nous cherchons la séquence des « m » caractères du motif et nous abandonnons dès qu’il y a un échec ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
128
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Premier algorithme : Nous continuons la recherche sur tous les débuts possibles et tant que nous n’avons pas trouvé ! trouve = false ; for i = 0 to n-m while not( trouve ) {trouve = true ; for j = 1 to m while trouve trouve = T[ i+j ] == P[ j ] ; i = i + 1 ; } resultat = ( trouve , i ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet
129
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Premier algorithme : trouve = false ; for i = 0 to n-m while not( trouve ) {trouve = true ; for j = 1 to m while trouve trouve = T[ i+j ] == P[ j ] ; i = i + 1 ; } resultat = ( trouve , i ) ; Complexité : O( n * m ) 16 novembre 2006 Cours d'algorithmique 4 - Intranet
130
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Principe de cet algorithme : Echec ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
131
Cours d'algorithmique 4 - Intranet
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
132
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Autre formulation : 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 ) ; Initialisations ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
133
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Autre formulation : 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 ) ; Nous poursuivons normalement jusqu’à avoir reconnu tout le pattern ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
134
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Autre formulation : 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 ) ; Sur un échec, nous recommençons au premier caractère du pattern et le caractère convenable de T. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
135
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Autre formulation : 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 ) ; Est-ce que nous avons pu aller à la fin du pattern et où ça ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
136
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Problème avec cet algorithme : Nous retournons en arrière dans le texte ! Dernière case lue ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
137
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Problème avec cet algorithme : Nous retournons en arrière dans le texte ! Dernière case lue ! ! ! Nous retournons en arrière vers cette case ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
138
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Or, il est inutile de retourner en arrière dans le texte ! Nous connaissons les valeurs, car ce sont les mêmes que celles du pattern! Dernière case lue ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
139
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Or, il est inutile de retourner en arrière dans le texte ! Nous connaissons les valeurs, car ce sont les mêmes que celles du pattern! Dernière case lue ! ! ! z y x z y x 16 novembre 2006 Cours d'algorithmique 4 - Intranet
140
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Or, il est inutile de retourner en arrière dans le texte ! Nous connaissons les valeurs, car ce sont les mêmes que celles du pattern! Dernière case lue ! ! ! z y x z y x ? ? ? z y x 16 novembre 2006 Cours d'algorithmique 4 - Intranet
141
Cours d'algorithmique 4 - Intranet
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
142
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 1 A B X Y i 16 novembre 2006 Cours d'algorithmique 4 - Intranet
143
Cours d'algorithmique 4 - Intranet
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
144
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 4 A B C D A B C X i 16 novembre 2006 Cours d'algorithmique 4 - Intranet
145
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 4 A B C D A B C X i A B C D 1 16 novembre 2006 Cours d'algorithmique 4 - Intranet
146
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Avancer d’une case ne sert à rien : 4 A B C D A B C X i A B C D 1 P [ 1 ] = P [ 2 ] / 16 novembre 2006 Cours d'algorithmique 4 - Intranet
147
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Avancer de deux cases ne sert à rien : 4 A B C D A B C X i A B C D 1 P [ 1 ] = P [ 3 ] / 16 novembre 2006 Cours d'algorithmique 4 - Intranet
148
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 5 A B A B C A B A B X i 16 novembre 2006 Cours d'algorithmique 4 - Intranet
149
Cours d'algorithmique 4 - Intranet
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
150
Cours d'algorithmique 4 - Intranet
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
151
Cours d'algorithmique 4 - Intranet
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
152
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 4 A B A B C A B A X i 16 novembre 2006 Cours d'algorithmique 4 - Intranet
153
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 4 A B A B C A B A X i A B A B C 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet
154
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Quelques cas de figure : 4 A B A B C A B A X i A B A B C 2 Nous pourrions faire un peu mieux ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
155
Cours d'algorithmique 4 - Intranet
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 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
156
Cours d'algorithmique 4 - Intranet
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 C A B A X i next [ 4 ] = 2 Nous restons sur i ! A B A B C 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet
157
Cours d'algorithmique 4 - Intranet
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 ! 5 A B A B C A B A B X i next [ 5 ] = 3 Nous restons sur i ! A B A B C 3 16 novembre 2006 Cours d'algorithmique 4 - Intranet
158
Cours d'algorithmique 4 - Intranet
Algorithme 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 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
159
Cours d'algorithmique 4 - Intranet
Algorithme 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 ! Si l’erreur a lieu pour le premier caractère du motif, nous avançons sur le texte ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
160
Cours d'algorithmique 4 - Intranet
Algorithme 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 ! Si l’erreur a lieu pour le premier caractère du motif, nous avançons sur le texte ! Dans tous les cas, nous retournons au caractère next[ j ] dans le motif ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
161
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Construisons next [ 1 .. m ] : next [ 1 ] = 1 ! next [ 2 ] = 1 ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
162
Cours d'algorithmique 4 - Intranet
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
163
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ ] = A B A B P [ ] = B A B 16 novembre 2006 Cours d'algorithmique 4 - Intranet
164
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ ] = A B A B P [ ] = B A B l = 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet
165
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ ] = A B A B P [ ] = B A B next [ 5 ] = 3 l = 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet
166
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ ] = A B A B P [ ] = B A B next [ 5 ] = 3 l = 2 5 A B A B C A B A B X i A B A B C 16 novembre 2006 Cours d'algorithmique 4 - Intranet 3
167
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ ] = A B A B P [ ] = B A B next [ 5 ] = 3 l = 2 5 A B A B C A B A B X i A B A B C 16 novembre 2006 Cours d'algorithmique 4 - Intranet 3
168
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calcul des next[ k ] pour k variant de 1 à m ! /* Les initialisations sont triviales */ next[ 1 ] = 1 ; next[ 2 ] = 1 ; /* Boucle de calcul des next[ k ] */ for k = 3 to m do next[ k ] = calc_next( k , P ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet
169
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calcul des next[ k ] pour k variant de 1 à m ! /* Les initialisations sont triviales */ next[ 1 ] = 1 ; next[ 2 ] = 1 ; /* Boucle de calcul des next[ k ] */ for k = 3 to m do next[ k ] = calc_next( k , P ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet
170
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calcul des next[ k ] pour k variant de 1 à m ! /* Les initialisations sont triviales */ next[ 1 ] = 1 ; next[ 2 ] = 1 ; /* Boucle de calcul des next[ k ] */ for k = 3 to m do next[ k ] = calc_next( k , P ) ; 16 novembre 2006 Cours d'algorithmique 4 - Intranet
171
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Les modifications par rapport au programme précédent ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
172
Cours d'algorithmique 4 - Intranet
Algorithme 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 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet
173
Cours d'algorithmique 4 - Intranet
Algorithme 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 ? Suffixe Préfixe 16 novembre 2006 Cours d'algorithmique 4 - Intranet
174
Cours d'algorithmique 4 - Intranet
Algorithme 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 ? Suffixe Préfixe Suite à un échec : Suffixe Préfixe 16 novembre 2006 Cours d'algorithmique 4 - Intranet
175
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Utilisons les next [ … ] déjà calculés ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
176
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Utilisons les next [ … ] déjà calculés ! 1 <= j < i < k 16 novembre 2006 Cours d'algorithmique 4 - Intranet
177
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Utilisons les next [ … ] déjà calculés ! 1 <= j < i < k 16 novembre 2006 Cours d'algorithmique 4 - Intranet
178
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Utilisons les next [ … ] déjà calculés ! 1 <= j < i < k 16 novembre 2006 Cours d'algorithmique 4 - Intranet
179
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } /* k > 2 */ Utilisons les next [ … ] déjà calculés ! 1 <= j < i < k 16 novembre 2006 Cours d'algorithmique 4 - Intranet
180
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) ; } Utilisons les next [ … ] déjà calculés ! 1 <= j < i < k {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
181
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
182
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
183
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
184
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
185
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Supposons que maintenant i == k ! Nous calculons en fait : next[ k ] = j 16 novembre 2006 Cours d'algorithmique 4 - Intranet
186
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {i = 2 ; j = 1 ; repeter si P[ i ] == P[ j ] {i = i+1 ; j = j+1 ; } sinon {if ( j == 1 ) i = i+1 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Supposons que maintenant i == k ! Nous calculons en fait : next[ k ] = j c’est-à-dire next[ i ] = j 16 novembre 2006 Cours d'algorithmique 4 - Intranet
187
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
188
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
189
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
190
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Nous calculons en fait : next[ k ] = 1 Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
191
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 ; j = next[ j ] ; } jusqua ( i >= k ) ; return( j ) ; } Comme : next[ k ] = calc_next( k , P ) Nous calculons en fait : next[ k ] = 1 c’est-à-dire next[ i ] = 1 Supposons que maintenant i == k ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
192
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 >= k ) ; return( j ) ; } 16 novembre 2006 Cours d'algorithmique 4 - Intranet
193
Cours d'algorithmique 4 - Intranet
Algorithme K - M - P Calculons tous les next [ … ] en même temps. calc_next ( k , P ) = {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 >= k ) ; return( j ) ; } Lorsque k = m nous calculons tous les next [ … ] au passage! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
194
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) next[ i ] = 1 ; } j = next[ j ] ; } jusqua ( i >= m ) ; Calcul de next [ 1 ] à next [ m ] ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
195
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) next[ i ] = 1 ; } j = next[ j ] ; } jusqua ( i >= m ) ; Calcul de next [ 1 ] à next [ m ] ! ! ! Les autres next[ … ] sont calculés au passage ! k = m ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
196
Cours d'algorithmique 4 - Intranet
Algorithme 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 ) next[ i ] = 1 ; } j = next[ j ] ; } jusqua ( i >= m ) ; Calcul de next [ 1 ] à next [ m ] ! ! ! Complexité : O ( m ) Les autres next[ … ] sont calculés au passage ! k = m ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
197
Cours d'algorithmique 4 - Intranet
Synthèse L’algorithme alpha-beta. Arbres alpha et beta et propriétés. Arbres de recherche équilibrés : les contraintes, certaines solutions. Recherche textuelle. 16 novembre 2006 Cours d'algorithmique 4 - Intranet
198
Cours d'algorithmique 4 - Intranet
m E r C i e T b O n N e J o U r N é E ! ! ! n ‘ O u B l I e Z p A s D e p R é P a R e R v O s T D ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.