Cours d’Algorithmique

Slides:



Advertisements
Présentations similaires
Présentation générale Marc Gengler
Advertisements

Environnement d’exécution
Les fonctions A quoi ça sert ?
Sensibilisation à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Les Structures de contrôles itératives
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
Cours d’Algorithmique
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d’Algorithmique
Problème des 4 couleurs, graphes planaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut.
Quelques applications.
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme alpha-beta. Sous-arbres alpha et beta dun arbre minimax et propriétés.
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
Cours de graphes Les plus courts chemins,
21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.
Marc Gengler
Analyse syntaxique (intro)
Cours d'algorithmique 8 - Intranet 1 4 décembre 2006 Cours dAlgorithmique Dérécursion (fin) : Équivalences entre programmes récursifs et programmes itératifs.
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Cours d’Algorithmique
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
28 février 2006Cours de graphes 3 - Intranet1 Cours de graphes Les arbres et arborescences. Les arbres de recouvrement. Les arbres de recouvrement minimaux.
Cours d’Algorithmique
Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations.
Projet Combien? Ma première machine : la machine Construction Ensemble G. Tisseau, J. Duma, H. Giroire, F. Le Calvez, M. Urtasun.
Service de formation en indemnisation Valeur au jour du sinistre ou valeur à neuf.
Chapitre III. Algorithmique élémentaire des tableaux (recherche, tri)
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Nous allons vous présenter: - Photoshop - Algorithme et programmation
ALGORITHMES RECURSIFS
CYCLE 3 : Alternatives Faire des choix dans un programme en C 1- AIGUILLAGE SIMPLE sur CONDITION : if-else 2-AIGUILLAGE MULTIPLE sur CONDITIONS if-else.
Cours d’Algorithmique
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 La Concurrence Déclarative Peter Van Roy Département dIngénierie Informatique, UCL
Problème des 4 couleurs, graphes planaires.
Programmation linéaire
Quelques applications.
Quelques graphes particuliers.
Cours de graphes Les arbres et arborescences.
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
Algorithme et programmation
Programmation linéaire en nombres entiers Algorithme de la subdivision successive («Branch and Bound Algorithm»)
Cours de graphes Marc Gengler Alexandra Bac Sébastien Fournier
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Cours de graphes 6 - Intranet
23 février 2007Cours de graphes 4 - Intranet1 Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut. Algos de Ford-Fulkerson et Edmonds-Karp.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Heuristiques C. Recherche de la meilleure branche . Branch And Bound
Programmation linéaire en nombres entiers
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours d’Algorithmique Logique de Hoare (fin) : Les boucles et les invariants.
3. Variantes de l’algorithme
Techniques d'Optimisation Master
1 UE Intro. Optimisation L3 INFO UPSud II. Programmation linéaire en variables entières (ou mixtes)
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Transcription de la présentation:

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

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

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

Cours d'algorithmique 4 - Intranet alpha - beta ----------------------------------------------------------------- max 5 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

Cours d'algorithmique 4 - Intranet alpha - beta ----------------------------------------------------------------- min 3 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

Cours d'algorithmique 4 - Intranet alpha - beta ----------------------------------------------------------------- max [ 3 … +inf [ 3 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet alpha - beta ----------------------------------------------------------------- max [ 3 … +inf [ 3 min [ 3 … 9 ] 9 ? 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d'algorithmique 4 - Intranet Arbre alpha ----------------------------------------------------------------- A R B R E B E T A 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 2 feuilles ! Tout sous-arbre alpha ou beta qu’il contient a 2 feuilles ! Il faut inspecter au minimum 2 * 2 - 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 . 2p p p 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- A R B R E S 2 - 3 - 4 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- 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

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- 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

Cours d'algorithmique 4 - Intranet 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 y z v t 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- 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

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- 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

Cours d'algorithmique 4 - Intranet Arbres 2 - 3 - 4 ----------------------------------------------------------------- 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

Cours d'algorithmique 4 - Intranet 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 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

Cours d'algorithmique 4 - Intranet 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 … 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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 nouvelle racine ! La racine ! et w x y z t x y z w t 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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 t x y z w t 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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. 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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 a b c d x a b c d 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet 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 b c d x b c d 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Principe de cet algorithme : Echec ! ! ! 16 novembre 2006 Cours d'algorithmique 4 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ 1 .. 4 ] = A B A B P [ 2 .. 4 ] = B A B 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ 1 .. 4 ] = A B A B P [ 2 .. 4 ] = B A B l = 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ 1 .. 4 ] = A B A B P [ 2 .. 4 ] = B A B next [ 5 ] = 3 l = 2 16 novembre 2006 Cours d'algorithmique 4 - Intranet

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ 1 .. 4 ] = A B A B P [ 2 .. 4 ] = 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

Cours d'algorithmique 4 - Intranet Algorithme K - M - P ----------------------------------------------------------------- Exemple : Soit P = A B A B C et k = 5 (erreur sur C ). P [ 1 .. 4 ] = A B A B P [ 2 .. 4 ] = 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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