Arbre radix
En informatique, un arbre radix ou arbre PATRICIA (pour Practical Algorithm To Retrieve Information Coded In Alphanumeric en anglais et signifiant algorithme commode pour extraire de l'information codĂ©e en alphanumĂ©rique) est une structure de donnĂ©es compacte permettant de reprĂ©senter un ensemble de mots adaptĂ©e pour la recherche. Il est obtenu Ă partir d'un arbre prĂ©fixe en fusionnant chaque nĆud n'ayant qu'un seul fils avec celui-ci. On peut alors Ă©tiqueter indiffĂ©remment chaque arĂȘte par un mot ou bien par une unique lettre.
Histoire
Le premier Ă parler dâ« arbre de PATRICIA » est Donald R. Morrison[1]. Ă peu prĂšs au mĂȘme moment, Gernot Gwehenberger invente indĂ©pendamment la mĂȘme structure[2].
Applications
Les arbres Patricia peuvent ĂȘtre utilisĂ©s dans la construction de tableaux associatifs.
Primitives
- Insertion : Ajout d'un mot Ă l'arbre.
- Suppression : Suppression d'un mot de l'arbre.
- Recherche : DĂ©termine si un mot est ou non dans l'arbre.
On peut Ă©galement ajouter d'autres primitives selon les usages :
- Recherche des mots avec un préfixe commun : Détermine la liste des mots commençant par un certain préfixe.
- Recherche du mot précédent : Recherche du plus grand mot parmi ceux plus petits qu'un certain mot. Les comparaisons utilisent l'ordre lexicographique.
- Recherche du mot suivant : Recherche du plus petit mot parmi ceux plus grands qu'un certain mot.
Recherche
Rechercher un mot dans un arbre consiste Ă parcourir l'arbre de maniĂšre que les arĂȘtes parcourues mises bout Ă bout forment le mot recherchĂ©.
Plus prĂ©cisĂ©ment, on part de la racine et on regarde si l'une des arĂȘtes est un prĂ©fixe du mot. Si on n'en trouve pas, le mot ne se trouve pas dans l'arbre. Sinon, on rĂ©itĂšre le processus sur le nĆud correspondant, jusqu'Ă ce que l'on tombe sur une feuille. Lorsqu'on arrive Ă une feuille, deux cas se prĂ©sentent : soit le mot correspond aux arĂȘtes parcourues mises bout Ă bout, soit le mot est en fait plus long et ne fait que commencer par le mot lu sur l'arbre. Dans ce cas, le mot n'est pas contenu dans l'arbre.
Cet algorithme est illustré par le pseudo-code suivant :
Fonction rechercher(arbre,mot) : Si est_feuille(arbre) et est_vide(mot) alors Renvoyer Vrai Sinon si est_vide(mot) ou est_feuille(arbre) alors Renvoyer Faux Sinon Pour arĂȘte dans arĂȘtes(arbre) faire Si est_un_prĂ©fixe(arĂȘte,mot) alors Renvoyer rechercher(sous_arbre(arbre,arĂȘte) , suffixe(mot,taille(arĂȘte)) ) Renvoyer Faux
Suppression
Cette opération se fait à l'identique de la recherche d'un mot. Lorsqu'on a trouvé le mot à supprimer, il suffit ensuite de supprimer la feuille correspondant à l'identique d'une suppression sur un arbre.
Insertion
L'insertion d'un mot commence par le parcours de l'arbre de maniĂšre identique Ă la recherche d'un mot jusqu'Ă ce qu'aucune des arĂȘtes ne coĂŻncide avec la fin du mot Ă insĂ©rer. Si l'on arrive Ă une feuille, c'est que le mot est dĂ©jĂ dans l'arbre. Sinon on cherche une arĂȘte ayant un prĂ©fixe commun avec la suite du mot.
- Si aucune des arĂȘtes n'a de prĂ©fixe commun, on ajoute un fils au nĆud sur lequel on se trouve. L'arĂȘte les reliant est la fin du mot Ă insĂ©rer.
- Sinon, on choisit l'un des prĂ©fixes en commun, on supprime l'arĂȘte correspondante. On crĂ©e ensuite une arĂȘte ayant pour Ă©tiquette ce prĂ©fixe et on lui ajoute deux fils avec pour Ă©tiquettes l'une le suffixe de l'arĂȘte que l'on a supprimĂ©, l'autre la fin du mot Ă insĂ©rer privĂ©e du prĂ©fixe commun.
Comparaison avec les autres structures de données
Dans la comparaison suivante, on supposera que les mots sont de longueur k et que le nombre de mot est n.
Les opĂ©rations de recherche, de suppression et d'insertion d'un mot ont des complexitĂ©s en O(k). Par consĂ©quent, la complexitĂ© temporelle de ces opĂ©rations ne dĂ©pend pas du nombre de donnĂ©es contenues par l'arbre radix. Avec un arbre Ă©quilibrĂ©, cette complexitĂ© est en O(ln(n)). Cependant, dans la plupart des cas, k est plus grand que ln(n), sauf dans les cas oĂč la quantitĂ© de donnĂ©e serait trĂšs importante. MalgrĂ© tout, les comparaisons dans un arbre Ă©quilibrĂ© sont des comparaisons de chaĂźnes de caractĂšres qui sont le plus souvent en complexitĂ© en O(k).
Bien que la complexitĂ© pour un trie soit elle aussi en temps constant par rapport au nombre de donnĂ©es, les opĂ©rations demandent exactement m comparaisons pour un mot de longueur m alors que ce nombre peut ĂȘtre diminuĂ© dans un arbre radix.
Les arbres radix partagent les dĂ©savantages des tries. En effet, ils ne s'appliquent qu'aux chaĂźnes de caractĂšres ou aux Ă©lĂ©ments pouvant aisĂ©ment ĂȘtre transformĂ©s en chaĂźne de caractĂšre (et rĂ©ciproquement) alors que les arbres Ă©quilibrĂ©s peuvent s'appliquer sur tout ensemble d'Ă©lĂ©ments muni d'une relation d'ordre total. Les arbres radix ne sont donc pas adaptĂ©s aux types de donnĂ©es ne possĂ©dant pas d'opĂ©ration de sĂ©rialisation.
Le temps d'insertion et de suppression d'une table de hachage sont souvent considĂ©rĂ©s comme Ă©tant en O(1), mais ce n'est vrai que si l'on considĂšre que le calcul de la clĂ© via la fonction de hachage est en temps constant. En prenant en compte le temps de hachage, la complexitĂ© s'avĂšre en fait ĂȘtre en O(k) dans le cas des mots, voire plus si des collisions apparaissent lors du calcul. De plus, ni la fonction de recherche du successeur, ni celle de recherche du prĂ©dĂ©cesseur ne peuvent ĂȘtre implĂ©mentĂ©es Ă l'aide d'une table de hachage.
Variantes
Une variante courante des arbres radix consiste Ă introduire deux couleurs pour chaque nĆud, par exemple "blanc" et "noir". L'algorithme de recherche est alors le mĂȘme que celui prĂ©cĂ©demment sauf que si la feuille sur laquelle on arrive est noire, alors le mot recherchĂ© n'est pas dans l'arbre. Cela permet d'ajouter plusieurs mots Ă la fois (par exemple tous les mots ayant un mĂȘme prĂ©fixe) puis d'enlever quelques exceptions en les insĂ©rant avec un nĆud noir.
Voir aussi
Notes et références
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « Radix tree » (voir la liste des auteurs).
- Morrison, Donald R. Practical Algorithm to Retrieve Information Coded in Alphanumeric
- G. Gwehenberger, Anwendung einer binĂ€ren Verweiskettenmethode beim Aufbau von Listen. Elektronische Rechenanlagen 10 (1968), pp. 223â226