Les tableaux de suffixes ont été introduits par arbres de suffixes . Ils avaient été découverts indépendamment par Gaston Gonnet en 1987 sous le nom de tableau PAT Gonnet, Baeza-Yates et Snider 1992 ) .
Les tableaux de suffixes améliorés (ESA) sont des tableaux de suffixes comportant des tables supplémentaires qui reproduisent l'intégralité des fonctionnalités des arbres de suffixes tout en conservant la même complexité temporelle et mémoire. Un tableau trié ne contenant que certains (et non tous) les suffixes d'une chaîne est appelé haricot-chaîne et laissezdésigner la sous-chaîne deallant deàcompris.
Le tableau des suffixesdeest maintenant défini comme un tableau d'entiers fournissant les positions de départ des suffixes depar ordre lexicographique . Cela signifie, une entréecontient la position de départ de-ème plus petit suffixe danset donc pour tous:.
Chaque suffixe deapparaît dansUne seule fois. Les suffixes sont de simples chaînes de caractères. Ces chaînes sont triées (comme dans un dictionnaire papier) avant que leurs positions initiales (indices entiers) ne soient enregistrées..
Exemple
Considérez le texte= banana$à indexer :
| b | un | n | un | n | un | $ |
Le texte se termine par une lettre sentinelle spéciale $, unique et lexicographiquement plus petite que tout autre caractère. Le texte comporte les suffixes suivants :
| Suffixe | je |
|---|---|
| banane$ | 1 |
| anana$ | 2 |
| nana$ | 3 |
| ana$ | 4 |
| na$ | 5 |
| un$ | 6 |
| $ | 7 |
Ces suffixes peuvent être triés par ordre croissant :
| Suffixe | je |
|---|---|
| $ | 7 |
| un$ | 6 |
| ana$ | 4 |
| anana$ | 2 |
| banane$ | 1 |
| na$ | 5 |
| nana$ | 3 |
Le tableau des suffixescontient les positions de départ de ces suffixes triés :
| = | 7 | 6 | 4 | 2 | 1 | 5 | 3 |
|---|
Tableau des suffixes avec les suffixes écrits verticalement en dessous pour plus de clarté :
| = | 7 | 6 | 4 | 2 | 1 | 5 | 3 |
|---|---|---|---|---|---|---|---|
contient la valeur 4 et fait donc référence au suffixe commençant à la position 4 dans, qui est le suffixe ana$.Correspondance avec les arbres de suffixesLes tableaux de suffixes sont étroitement liés aux arbres de suffixes :
Il a été démontré que tout algorithme d'arbre de suffixes peut être systématiquement remplacé par un algorithme utilisant un tableau de suffixes enrichi d'informations supplémentaires (comme le tableau LCP ) et résolvant le même problème avec la même complexité temporelle. Les avantages des tableaux de suffixes par rapport aux arbres de suffixes incluent une réduction de l'espace mémoire requis, des algorithmes de construction linéaires plus simples (par exemple, comparés à l'algorithme d'Ukkonen ) et une meilleure localité du cache. Optimisation de l'espaceLes tableaux de suffixes ont été introduits par les arbres de suffixes : les tableaux de suffixes stockententiers. Supposer qu'un entier nécessiteoctets, un tableau de suffixes nécessiteoctets au total. C'est nettement inférieur àoctets requis par une implémentation soignée de l'arbre de suffixes. Cependant, dans certaines applications, l'espace requis par les tableaux de suffixes peut encore être prohibitif. Analysé en bits, un tableau de suffixes nécessiteespace, alors que le texte original sur un alphabet de taillene nécessite quebits. Pour un génome humain avecetLe tableau de suffixes occuperait donc environ 16 fois plus de mémoire que le génome lui-même. Ces divergences ont favorisé l'essor des tableaux de suffixes compressés et des index de texte intégral compressés basés sur la transformée en ondelettes bayésienne (BWT) , tels que l' index FM . Ces structures de données ne nécessitent qu'un espace mémoire équivalent à la taille du texte, voire inférieur. algorithmes de constructionUn arbre de suffixes peut être construit danset peut être converti en un tableau de suffixes en parcourant l'arbre en profondeur d'abord également dansIl existe donc des algorithmes capables de construire un tableau de suffixes dans. Une approche naïve pour construire un tableau de suffixes consiste à utiliser un algorithme de tri par comparaison . Ces algorithmes nécessitentcomparaisons de suffixes, mais une comparaison de suffixes s'exécute dansle temps, donc le temps d'exécution global de cette approche est. Les algorithmes plus avancés tirent parti du fait que les suffixes à trier ne sont pas des chaînes arbitraires mais sont liés entre eux. Ces algorithmes s'efforcent d'atteindre les objectifs suivants :
L'un des premiers algorithmes à atteindre tous les objectifs est l'algorithme SA-IS de lignes de code ) et peut être optimisé pour construire simultanément le tableau LCP . L'algorithme SA-IS est l'un des algorithmes de construction de tableaux de suffixes les plus rapides connus. Une implémentation soignée par Yuta Mori surpasse la plupart des autres approches de construction linéaires ou super-linéaires. Outre les contraintes de temps et d'espace, les algorithmes de construction de tableaux de suffixes se distinguent également par l' alphabet qu'ils prennent en charge : les alphabets constants, où la taille de l'alphabet est limitée par une constante, et les alphabets entiers, où les caractères sont des entiers compris dans une plage dépendant de…et les alphabets généraux où seules les comparaisons de caractères sont autorisées. La plupart des algorithmes de construction de tableaux de suffixes sont basés sur l'une des approches suivantes :
Tableau de suffixes généraliséLe concept de tableau de suffixes peut être étendu à plusieurs chaînes de caractères. On parle alors de tableau de suffixes généralisé (ou GSA), un tableau de suffixes qui contient tous les suffixes d'un ensemble de chaînes (par exemple,et est trié lexicographiquement avec tous les suffixes de chaque chaîne. ApplicationsLe tableau des suffixes d'une chaîne peut servir d' index pour localiser rapidement chaque occurrence d'un motif de sous-chaîne.à l'intérieur de la chaîneTrouver chaque occurrence du motif revient à trouver chaque suffixe commençant par la sous-chaîne. Grâce à l'ordre lexicographique, ces suffixes sont regroupés dans le tableau des suffixes et peuvent être trouvés efficacement en deux recherches dichotomiques . La première recherche localise le début de l'intervalle, et la seconde détermine sa fin. de longueurdans la chaînede longueurprendtemps, étant donné qu'une seule comparaison de suffixes doit être comparéepersonnages. Le temps d'utilisation des informations LCP est optimisé. L'idée est qu'une comparaison de motifs n'a pas besoin de recomparer certains caractères lorsqu'on sait déjà qu'ils font partie du plus long préfixe commun du motif et de l'intervalle de recherche actuel. pour une taille d'alphabet constante, comme on le sait grâce aux arbres de suffixes . Les algorithmes de tri par suffixes permettent de calculer la transformation de Burrows-Wheeler (BWT) . La BWT nécessite le tri de toutes les permutations cycliques d'une chaîne. Si cette chaîne se termine par un caractère de fin de chaîne spécial, lexicographiquement inférieur à tous les autres caractères (par exemple, $), alors l'ordre de la matrice BWT triée et pivotée correspond à l'ordre des suffixes dans un tableau de suffixes. La BWT peut donc être calculée en temps linéaire en construisant d'abord un tableau de suffixes du texte, puis en déduisant la chaîne BWT .. Les tableaux de suffixes peuvent également être utilisés pour rechercher des sous-chaînes dans la traduction automatique basée sur des exemples , nécessitant beaucoup moins d'espace de stockage qu'une la traduction automatique statistique . De nombreuses autres applications du tableau de suffixes nécessitent le tableau LCP . Certaines d'entre elles sont détaillées dans la section « Applications » de ce dernier. Tableaux de suffixes améliorésLes arbres de suffixes sont des structures de données puissantes, largement utilisées pour la recherche de motifs et de chaînes de caractères, l'indexation et les statistiques textuelles. Cependant, leur taille importante constitue un inconvénient majeur pour de nombreuses applications temps réel nécessitant le traitement de volumes considérables de données, comme l'analyse génomique. Pour pallier cet inconvénient, le tableau de suffixes amélioré a été développé. Il s'agit d'une structure de données composée d'un tableau de suffixes et d'une table supplémentaire, appelée table des enfants, qui contient les informations relatives aux relations parent-enfant entre les nœuds de l'arbre de suffixes. La structure de données de branchement des nœuds de cet arbre est une liste chaînée . Les tableaux de suffixes améliorés sont supérieurs aux arbres de suffixes en termes d'efficacité spatiale et de complexité temporelle, et sont faciles à implémenter. De plus, ils peuvent être appliqués à tout algorithme utilisant un arbre de suffixes grâce au concept abstrait des arbres d'intervalles LCP. La complexité temporelle de la recherche d'un motif de longueur n est de O(n^n).dans un tableau de suffixes amélioré est. Le tableau de suffixes amélioré est composé de deux tableaux :
Construction de l'intervalle lcpPour un tableau de suffixes de S, l'intervalle lcp associé au nœud correspondant de l'arbre de suffixes de S peut être défini comme suit :
La longueur du plus long préfixe commun à pos[i − 1] et pos[i] est stockée dans lcp[i], où 2 ≤ i ≤ n. L'intervalle lcp représente la même relation parent-enfant que celle qui existe entre les nœuds associés dans l'arbre des suffixes de S. Cela signifie que si le nœud correspondant de [i..j] est un enfant du nœud correspondant de [k..l], alors un intervalle lcp [i..j] est un intervalle enfant d'un autre intervalle lcp [k..l]. Si [k..l] est un intervalle enfant de [i..j], alors un intervalle lcp [i..j] est l'intervalle parent d'un intervalle lcp [k..l]. Construction d'une table enfantLa table enfant cldtab est composée de trois tableaux de taille n : up , down et nextlIndex . Les tableaux up et down stockent et gèrent les informations relatives aux arêtes de l’arbre de suffixes correspondant . Le tableau nextlIndex stocke les liens de la liste chaînée utilisée pour le branchement des nœuds de l’arbre de suffixes. Les tableaux up , down et nextlIndex sont définis comme suit :
En parcourant l'intervalle lcp de l'arbre de bas en haut, la table des enfants peut être construite en temps linéaire. Les valeurs up/down et nextlIndex peuvent être calculées séparément à l'aide de deux algorithmes distincts. Construction d'une table de liens de suffixeLes liens de suffixe d'un tableau de suffixes étendu peuvent être calculés en générant l'intervalle de liens de suffixe [ 1,..,r ] pour chaque intervalle [i,..j] lors du prétraitement. Les éléments gauche et droit l et r de l'intervalle sont stockés dans le premier index de [i,..,j]. La table de ces intervalles s'étend de 0 à n. La table des liens de suffixe est construite par un parcours en largeur de gauche à droite de l'arbre des intervalles lcp. Chaque fois qu'un intervalle l est calculé, il est ajouté à la liste des intervalles l, appelée liste l. Lorsque la valeur lcp > 0, pour chaque intervalle l [i,..,j] de la liste, le lien [i] est calculé. L'intervalle [ l ,.., r ] est calculé par une recherche dichotomique dans la liste ( l - 1), où l est la plus grande borne gauche parmi tous les l - 1 intervalles. L'intervalle de lien de suffixe de [i,..j] est représenté par cet intervalle[ l,..,r ]. Les valeurs l et r sont finalement stockées dans le premier index de [i,..,j]. |