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