1 Le cas des motifs auto-maximaux

publicité
Algorithmique avancée
L3 2009 2010
TD 2 : Recherche en espace mémoire constant
http://www.lsv.ens-cachan.fr/~villard/algo2/
On dit qu'un algorithme travaille en espace constant si la taille des données
qu'il manipule en plus de l'entrée est bornée par une constante. Les algorithmes
de recherche de motif vus en cours travaillent tous au moins en espace linéaire en
la taille du motif. On va concevoir dans ce TD un algorithme dont la complexité
en temps est linéaire, et dont la complexité en espace est, elle, constante.
Préliminaires On dit que 𝑝 est une période de 𝑢 si ∀𝑖 ∈ {1, . . . , ∣𝑢∣−𝑝}, 𝑢[𝑖] =
𝑢[𝑖 + 𝑝]. On note Period (𝑢) la plus petite période de 𝑢 (qui existe toujours,
puisque ∣𝑢∣ est toujours période de 𝑢). On dit que 𝑢 est périodique si Period (𝑢) ≤
∣𝑢∣/2.
Exercice 1 Montrer que si 𝑝 et 𝑞 sont deux périodes d'un mot 𝑢, et si 𝑝 + 𝑞 <
∣𝑢∣, alors pgcd (𝑝, 𝑞) est aussi une période de 𝑢
1
Le cas des motifs auto-maximaux
On suppose qu'on dispose d'un ordre sur l'alphabet, et on note MaxSuf (𝑤)
le suxe maximal de 𝑤 au sens de l'ordre lexicographique. Le mot 𝑤 est dit
auto-maximal si MaxSuf (𝑤) = 𝑤 .
Exercice 2 Démontrer les propriétés suivantes :
1. Si 𝑤 est périodique, alors Period (MaxSuf (𝑤)) = Period (𝑤) ;
2. Si 𝑤 est auto-maximal, chacun de ses préxes l'est.
On considère l'algorithme suivant.
p é r i o d e _ n a ï v e ( 𝑤 , 𝑗 ) :=
Period := 1 ;
pour 𝑖 de 2 à 𝑗 f a i r e
s i 𝑤[𝑖] ∕= 𝑤[𝑖 − Period ] alors Period := 𝑖 ;
retourner Period ;
Exercice 3 Montrer que, lorsque 𝑤 est auto-maximal, période_naïve(𝑤,𝑗 )
calcule bien Period (𝑤[1, 𝑗]). Pour cela, on montrera que, pour 𝑝 = Period (𝑤[1, 𝑖−
1]), si 𝑤[𝑖] ∕= 𝑤[𝑖 − 𝑝] alors 𝑤[𝑖] < 𝑤[𝑖 − 𝑝]. On montrera qu'on obtient alors une
contradiction si on suppose en plus que Period (𝑤[1, 𝑖]) < 𝑖.
On cherche maintenant à résoudre le problème de la recherche de motif en
espace constant dans le cas où le motif 𝑃 est auto-maximal. On va pour cela
modier l'algorithme de Morris-Pratt pour éviter le calcul de 𝜋 .
Exercice 4 On suppose que 𝑃 est auto-maximal. Montrer que pour tout 𝑗 >
0, 𝑗 − 𝜋(𝑗) = Period (𝑃 [1, 𝑗]). En déduire une version MPAuto de l'algorithme
de Morris-Pratt fonctionnant en espace constant et en temps linéaire.
J. Villard
1
ENS de Cachan
Algorithmique avancée
2
L3 2009 2010
Cas général
On ne suppose maintenant plus que 𝑃 est auto-maximal. Dans un premier
temps, on suppose connue sa décomposition 𝑃 = 𝑢𝑣 où 𝑣 = MaxSuf (𝑃 ).
Exercice 5 Concevoir un algorithme de recherche de motif pour 𝑃 qui s'appuie
sur l'algorithme MPAuto et qui fonctionne en espace mémoire constant.
Exercice 6 Optimiser l'algorithme précédent en prouvant la propriété suiv-
ante : si 𝑣 apparaît avec un décalage de 𝑖 dans 𝑇 , alors 𝑢𝑣 ne peut apparaître
avec un décalage de 𝑗 dans 𝑇 , pour tout 𝑗 ∈ {𝑖 − ∣𝑢∣ + 1, 𝑖 − ∣𝑢∣ + 2, . . . , 𝑖}.
Montrer que l'algorithme obtenu fait au plus ∣𝑇 ∣ comparaisons supplémentaires
par rapport à MPAuto.
On cherche maintenant à calculer MaxSuf (𝑃 ) ecacement. Pour cela, on
donne d'abord un algorithme qui calcule le plus long préxe auto-maximal d'un
mot 𝑤. Cet algorithme calcule en même temps sa plus courte période.
plpam ( 𝑤 ) :=
Period := 1 ;
pour 𝑖 de 2 à ∣𝑤∣ f a i r e
s i 𝑤[𝑖] < 𝑤[𝑖 − Period ] alors Period := 𝑖 ;
sinon s i 𝑤[𝑖] > 𝑤[𝑖 − Period ] alors
retourner (𝑖 − 1, Period ) ;
retourner (∣𝑤∣, Period ) ;
Exercice 7 Montrer que plpam(𝑤) calcule bien le plus long préxe automaximal de 𝑤 et sa plus courte période.
Exercice 8 En déduire un algorithme qui calcule MaxSuf (𝑃 ). Montrer qu'il
travaille en espace constant et qu'il eectue moins de 2 ⋅ ∣𝑃 ∣ comparaisons.
3
Une autre solution à l'exercice 2 du TD 1
On cherche à déterminer si deux mots de taille 𝑛 sont rotation l'un de l'autre.
Pour un mot 𝑢 de taille 𝑛 donné, on note 𝑢(𝑖) = 𝑢[𝑖 + 1, 𝑛]𝑢[1, 𝑖]. Étant donnés
deux mots 𝑢 et 𝑣 , le problème se ramène à chercher s'il existe 𝑖 et 𝑗 tels que
𝑢(𝑖) = 𝑣 (𝑗) .
Exercice 9 Soient les ensembles suivants :
𝐷(𝑢)
=
{𝑘 ∈ {1, . . . , 𝑛} ∣ ∃𝑗, 𝑢(𝑘) > 𝑣 (𝑗) }
𝐷(𝑣)
=
{𝑘 ∈ {1, . . . , 𝑛} ∣ ∃𝑗, 𝑣 (𝑘) > 𝑢(𝑗) }
Montrer que si 𝐷(𝑢) = {1, . . . , 𝑛} ou 𝐷(𝑣) = {1, . . . , 𝑛}, alors 𝑢 et 𝑣 ne sont pas
rotation l'un de l'autre.
Exercice 10 En déduire un algorithme en espace constant et temps linéaire
qui résoud le problème.
J. Villard
2
ENS de Cachan
Téléchargement