# 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 et redécouverte en 1992.

## Définition

Soient un alphabet de taille finie ${\mathcal {A}}$ et un ordre lexicographique sur cet alphabet.
Soit $w$ un mot sur l'alphabet ${\mathcal {A}}$. Ce mot de longueur $|w|=n$ compte $n$ suffixes. 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 $w$ ; par exemple, le suffixe à la position 0 est le mot $w$ lui-même. Une fois les suffixes ordonnés, leurs positions de début correspondantes forment le tableau des suffixes.

### Exemple

Prenons le mot $w$=abracadabra. Ce mot $w$, 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 $O(n\log n)$ comparaisons en moyenne (où $n$ est la longueur du mot), et où chaque comparaison de suffixe prend dans le pire des cas $O(n)$. Donc, naïvement, le tri des suffixes prend un temps $O(n^{2}\log n)$ dans le pire des cas. Plusieurs algorithmes améliorent cette borne, proposant des complexités de l'ordre de $O(n\log n)$, voire $\Theta (n)$.
(Li, Li et Huo 2016) ont donné le premier algorithme de construction du tableau des suffixes en complexité $O(n)$ qui est optimal à la fois en temps et en place, où « en place » signifie que l'algorithme n'a besoin que de $O(1)$ 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. D'après la monographie Construction of Fundamental Data Structures for Strings, 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 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).