info@mp2i-pv
Un arbre lexicographique (trie en anglais) est un arbre qui sert à représenter un ensemble fini de mots (un mot étant une suite de finie de lettres).
Pour simplifier, on suppose dans la suite que les seules lettres utilisées sont les lettres minuscules non accentuées.
L’ensemble de mots { “inf”, “info”, “matelas”, “math”, “matrice”} est représenté par l’arbre
On peut implémenter un tel arbre en utilisant un tableau de taille 26 pour représenter les fils d’un nœud, ou avec une liste chaînée de longueur au plus 26 pour cela (dans l’idéal les fils étant dans l’ordre alphabétique). Dans ce TP, on fait le choix d’implémenter l’arbre en représentation fils gauche / frère droit.
Ce qui donne pour l’exemple précédent:
Tout le TP est à faire en C
et en ocaml
.
Comme on n’a pas vraiment encore fait les chaînes de caractères, ni en
C
, ni en ocaml
, on va considérer à la place:
C
, avec le caractère \0
comme
sentinelle (bon et pour ne rien vous cacher, c’est ça une chaîne de
caractères en C
),ocaml
.Pour chaque exercice qui est de la programmation:
Proposer une implémenation de la structure de données qui respecte les contraintes ci-dessus (notamment concernant la représentation par arbre fils gauche / frère droit).
Construire à la main l’arbre lexicographique correspondant au lexique donné en exemple.
Écrire une fonction qui prend en argument un arbre lexicographique et affiche la liste des mots qu’il contient.
Quelle sont les complexités de vos fonctions (C
et ocaml
) par
rapport à la taille des données?
Écrire une fonction permettant d’ajouter un mot (format d’un mot décrit avant les exercices) dans un arbre lexicographique.
Quelle sont les complexités de vos fonctions (C
et ocaml
) par
rapport à la taille des données?
Écrire une fonction permettant de supprimer un mot d’un arbre lexicographique.
Quelle sont les complexités de vos fonctions (C
et ocaml
) par
rapport à la taille des données?