M1 - TP Algorithme du texte - Arbre des motifs Eric Rivals Décembre 2012 Ce TP porte sur la construction d’un arbre des motifs, ainsi que la recherche de l’ensemble des motifs de l’arbre dans un texte T . Vous disposez d’une ébauche de programme dans le fichier C++ suivant arbreMotifs-structures.cpp qui est sur l’ENT. Ce fichier implante la classe de noeud, celle d’arbre, plusieurs méthodes dont trouveFils et ajoutFils pour un noeud. 1 Première partie 1.1 Utilisation de l’arbre des motifs comme s’il était un dictionnaire. 1. On dispose d’un arbre A et de sa racine. On vous donne un autre mot s. Ecrivez une procédure trouveMot qui prend s en entrée et répond oui si s est un des motifs stocké dans l’arbre et non dans le cas contraire. 2. Ecrivez recherchePref( string s ) qui echerche le plus long préfixe de s qui est un préfixe des mots de A. 3. On écrit une procédure similaire mais améliorée par rapport à la précédente. Ecrivez trouvePref qui prend un mot s et un indice deb dans s, et qui recherche le plus long mot qui commence en deb et qui matche un préfixe des mots de A. 1.2 Construction de l’arbre des motifs 1. Implantez la procédure d’ajout d’un motif à un arbre des motifs. 2. Implantez l’algorithme de construction de l’arbre des motifs à partir d’un tableau contenant tous les motifs. Cet algorithme utilise la procédure précédente. Ceci doit donner un nouveau constructeur de la classe arbre qui prend en entrée le tableau des motifs et le nombre de motifs dans ce tableau. 1 2 Algorithme de recherche des motifs dans un texte en utilisant l’arbre des motifs et ses liens d’échec. 1. Implantez une fonction qui pour un arbre contenant des motifs, calcule les liens d’échec de tous les noeuds. Vous pouvez décomposez en une sous procédure qui calcule le lien d’échec d’un noeud donné et qui prend en entrée un pointeur sur ce noeud et un sur son père. 2. Implantez une fonction de la classe arbre qui prend un texte T en entrée, sa longueur n et effectue la recherche de toutes les occurrences des motifs dans T . Cette recherche doit utiliser l’arbre des motifs et ses liens d’échec. 3. Optionel : Vous pouvez aussi implanter la recherche naive des mots dans le texte T . 4. Optionel : Vous pouvez aussi implanter le destructeur de la classe arbre. 2