Cours d`Algorithmique

publicité
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
Téléchargement