Tableau des suffixes
Un tableau des suffixes (parfois nommé table des suffixes, en anglais : suffix array) est une structure de données utilisée en informatique, et plus particulièrement en combinatoire des mots et en bio-informatique. Pour un mot donné, le tableau contient une liste d'entiers qui correspondent aux positions de début des suffixes du mot, lorsqu'ils sont triés selon l'ordre lexicographique.
L'objectif du tableau est de fournir les mêmes facilités de recherche qu'un arbre des suffixes tout en réduisant la taille mémoire utilisée. La structure a été introduite en 1990 par Manber et Myers[1] et redécouverte en 1992[2].
Définition
Soient un alphabet de taille finie et un ordre lexicographique sur cet alphabet.
Soit un mot sur l'alphabet . Ce mot de longueur compte suffixes[3]. Ces suffixes peuvent être ordonnés de manière croissante selon l'ordre lexicographique. À chaque suffixe correspond une position de début dans le mot ; par exemple, le suffixe à la position 0 est le mot lui-même. Une fois les suffixes ordonnés, leurs positions de début correspondantes forment le tableau des suffixes.
Exemple
Prenons le mot =abracadabra. Ce mot , de longueur 11, a les 11 suffixes abracadabra, bracadabra, racadabra, ..., a. Chacun de ces 11 suffixes peut être rangé de manière croissante selon l'ordre lexicographique. Dans le tableau ci-dessous, les suffixes sont rangés par ordre croissant. La deuxième colonne indique la position de début du suffixe dans le mot :
Suffixe Position de début a 10 abra 7 abracadabra 0 acadabra 3 adabra 5 bra 8 bracadabra 1 cadabra 4 dabra 6 ra 9 racadabra 2
Le tableau des suffixes T formé à partir du mot w est constitué des positions de début des 11 suffixes rangés par ordre lexicographique croissant, soit
- T = {10, 7, 0, 3, 5, 8, 1, 4, 6, 9, 2}.
Utilisation
Le tableau des suffixes est utilisé comme index pour la recherche de motifs dans un texte. La recherche d'un motif dans un texte est équivalente à la recherche du motif comme préfixe des suffixes du texte.
Le tableau est construit à partir du texte. Le tableau contient les positions de début des suffixes du texte. Or ces suffixes sont rangés par ordre lexicographique lors de la construction du tableau, donc les suffixes commençant par le motif recherché ont leurs positions dans des cases consécutives du tableau. Il n'est cependant pas possible, initialement, de savoir dans quelle section du tableau se trouve cet amas de positions recherchées. L'algorithme va donc utiliser une recherche dichotomique pour identifier cet amas.
Aspects algorithmiques
Complexité
Deux complexités sont à considérer : celle concernant le tri des suffixes selon l'ordre lexicographique (lors de la construction du tableau), et celle concernant la recherche d'un motif par dichotomie.
Le tri des suffixes est un algorithme qui prend naïvement comparaisons en moyenne (où est la longueur du mot), et où chaque comparaison de suffixe prend dans le pire des cas . Donc, naïvement, le tri des suffixes prend un temps dans le pire des cas. Plusieurs algorithmes améliorent cette borne, proposant des complexités de l'ordre de [1], voire [4].
(Li, Li et Huo 2016) ont donné le premier algorithme de construction du tableau des suffixes en complexité qui est optimal à la fois en temps et en place, où « en place » signifie que l'algorithme n'a besoin que de espace supplémentaire au-delà de la chaîne entrée et du tableau de suffixes en sortie. Un autre algorithme linéaire est donné en 2016 par Uwe Baier[5]. D'après la monographie Construction of Fundamental Data Structures for Strings[6], l'algorithme de (Li, Li et Huo 2016) est consécutif à deux algorithmes de Nong et al. en 2009 (appelé SAIS) et Nong en 2013 (appelé SACA-K) qui sont aussi linéaires. Un algorithme de Keisuke Goto[7] est de même complexité optimale (en temps et en place).
Compression
Pour réduire la place prise par un tableau des suffixes, deux types de structures de données compressées ont été créés : les tableaux des suffixes compressés (en) et le FM-index (basé sur la transformée de Burrows-Wheeler).
Bibliographie
- Udi Manber et Gene Myers, « Suffix arrays: a new method for on-line string searches », dans First Annual ACM-SIAM Symposium on Discrete Algorithms, (présentation en ligne), p. 319–327.
- Gaston Gonnet, Ricardo Baeza-Yates et Tim Snider, « New indices for text: PAT trees and PAT arrays », dans William B. Frakes et Ricardo A. Baeza-Yates (éditeurs), Information retrieval: data structures and algorithms, Prentice-Hall, , p. 66–82
- Zhize Li, Jian Li et Hongwei Huo, « Optimal In-Place Suffix Sorting », dans Proceedings of the 25th International Symposium on String Processing and Information Retrieval (SPIRE), 268–284, coll. « Lecture Notes in Computer Science » (no 11147), (ISBN 978-3-030-00478-1, DOI 10.1007/978-3-030-00479-8_22, arXiv 1610.08305), p. 268–284
Référence
- (Manber et Myers 1990)
- (Gonnet, Baeza-Yates et Snider 1992)
- On ignore le suffixe de longueur 0 : le mot vide.
- (en) N. Jesper Larson et Kunihiko Sadakane, « Faster suffix sorting », Theoretical Computer Science, vol. 387, no 3, , p. 258-272 (DOI 10.1016/j.tcs.2007.07.017, lire en ligne).
- Uwe Baier, « Linear-time Suffix Sorting - A New Approach for Suffix Array Construction », dans Roberto Grossi et Moshe Lewenstein (éditeurs), 27th Annual Symposium on Combinatorial Pattern Matching, Schloss Dagstuhl--Leibniz-Zentrum fuer Informatik, coll. « Leibniz International Proceedings in Informatics (LIPIcs) » (no 54), (ISBN 978-3-95977-012-5, DOI 10.4230/LIPIcs.CPM.2016.23, lire en ligne), p. 123:1-23:12
- Felipe A. Louza, Simon Gog et Guilherme P. Telles, Construction of Fundamental Data Structures for Strings, Springer, coll. « Springer Briefs in Computer Science », , ix+104 (ISBN 978-3-030-55107-0 et 978-3-030-55108-7, DOI 10.1007/978-3-030-55108-7).
- Keisuke Goto, « Optimal time and space construction of suffix arrays and LCP arrays for integer alphabets », dans Proc. Prague Stringology Conference, , 111–125 p. (lire en ligne).