Tableau de Lyndon
En combinatoire, et particulièrement en combinatoire des mots et en algorithmique du texte, le tableau de Lyndon d'une chaîne w est un tableau de même taille dont les entrées contiennent les longueurs des mots de Lyndon maximaux commençant dans les positions respectives. Ce tableau est utile dans la détermination et le décompte des répétitions de facteurs dans le mot.
Description
Tableau de Lyndon
Le tableau de Lyndon d'une chaîne est un tableau de même taille tel que est la longueur du plus long facteur de commençant en position qui est un mot de Lyndon. Formellement :
- Exemple
Les tableaux sont numérotés à partir de 0. Soit . Le tableau de Lyndon du mot est donné dans la dernière colonne ci-dessous :
Indice Lyndon L 0 00011001 8 1 0011 4 2 011 3 3 1 1 4 1 1 5 001 3 6 01 2 7 1 1
Le tableau de Lyndon est
- .
Autres tableaux
Deux autres tableaux sont liés au tableau de Lyndon d'un mot, d'une part le tableau des suffixes et d'autre part le tableau dites des valeurs inférieures suivantes :
Le tableau des valeurs inférieures suivantes (en anglais next smaller value array) est défini pour un tableau d'entiers ; il contient, pour l'indice , le plus petit indice d'une valeur dans qui est plus petite que ; si une telle valeur n'existe pas, le tableau contient pour cet indice la valeur maximale . Formellement,
- .
Par exemple, pour le tableau
- ,
le tableau des valeurs inférieures suivantes est
- .
Relation entre ces tableaux
Franek et al.[1] ont montré que le tableau de Lyndon se calcule facilement en temps linéaire en appliquant la construction du next smaller value array à l'inverse du tableau des suffixes : si on note le tableau des suffixe du mot et l'inverse de ce tableau (de sorte que ssi ), alors le tableau de Lyndon est donné par la formule
- .
- Exemple
Pour le mot , le tableau des suffixes - qui donne la longueurs des suffixes dans l'ordre lexicographique - est
et le tableau des inverses est
- .
Le tableau des valeurs inférieures suivantes pour U est
- .
La formule donne
- !
Complexité du calcul
D'autres algorithmes ont été donnés[2]Modèle:,[3] : un algorithme quadratique en place basé sur l'algorithme de Duval itéré pour la factorisation de Lyndon et un schéma algorithmique linéaire basé sur le tri linéaire des suffixes, calculant le tableau des suffixes inverses et lui appliquant l'algorithme de calcul des valeurs inférieures suivantes[4]. Ces algorithmes s'exécutent en temps quadratique dans le pire des cas, un troisième prend un temps linéaire, au prix d'un calcul préalable du tableau de suffixes et du tableau de suffixes inverse de la chaîne. Deux variantes d'un algorithme donné par Frantisek Franek et Michael Liut[5] évitent le calcul préalable de structures de données globales et s'exécutent dans le pire des cas en temps .
D'après Felipe Louza et ses coauteurs[6], tous les algorithmes qui calculent de tableau de Lyndon en temps linéaire utilisent le calcul du tableau des suffixes dans une étape de précalcul. Un algorithme de tri des suffixes d'une chaîne a été donné par Nong en 2013[7]. Une variante de cet algorithme qui calcule simultanément le tableau de Lyndon et le tableau des suffixes d'une chaîne de longueur en temps et en place additionnelle où est la taille de l'alphabet, a été donné par Louza et al[6]. Des résultats expérimentaux avec des ensembles de données réels et synthétiques montrent que leur algorithme est non seulement efficace en espace, mais aussi rapide dans la pratique[6]. Un algorithme efficace a été présenté en 2020 par Bille et al[8].
Applications
Une des applications est due à Bannai et al.[9]. Ils ont utilisé les racines de Lyndon des runs pour prouver la conjecture des runs selon laquelle le nombre de runs dans un mot est majoré par la longueur du mot. Dans le même article, ils ont présenté un algorithme pour calculer tous les runs dans un mot en temps linéaire qui nécessite la connaissance de tous les facteurs de Lyndon maximaux à droite du mot donné, donc le tableau de Lyndon du mot pour à un ordre sur l'alphabet et pour son ordre inverse.
Notes et références
Articles liés
- ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesFranekSmyth2016 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesLouzaSmyth2018 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesFranekLiut2019 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesBaier2016 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesFranekLiut2020 - ↑ 6,0 6,1 et 6,2 Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesLouzaMantaci2019 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesNong2013 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesBille2020 - ↑ Erreur de référence : Balise
<ref>incorrecte : aucun texte n’a été fourni pour les références nomméesBannaiI2017