Académique Documents
Professionnel Documents
Culture Documents
Algorithmique du texte
Contrôle continu no 1
Date : 16 octobre 2017. Durée : 1 h. Documents, baladeurs, casques audio, oreillettes, calcu-
latrices, mobiles, tablettes, portables... interdits. Le barème est donné à titre indicatif.
Exercice 1 (5 points.)
1) Énoncez le lemme de périodicité de Fine et Wilf.
2) Donnez l’ensemble des mots qui admettent 3, 4 et 10 comme périodes mais pas 1. Rédigez,
justifiez et faites appel au dit lemme de manière judicieuse.
3) Même chose pour 3, 5 et 9.
4) Même chose pour 3, 6 et 8.
Exercice 2 (10 points.)
Soit A un alphabet. Soit h : A∗ → A∗ la fonction définie par :
h(ε) = ε ;
h(ua) = h(u) · a · h(u), pour tout mot u ∈ A∗ et toute lettre a ∈ A.
#include <stddef.h>
NULL
#include <string.h>
void *memchr(const void *s, int c, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
inférieure à celle de x et une lettre c tels que x = x 0 c. D’où h(x) = h(x 0 )·c ·h(x 0 ). Par identification,
k−1
h(x 0 ) = (ab)2 −1 a et c = b. Par application de l’hypothèse de récurrence, x 0 = abk−1 . Il vient
donc x = abk−1 · b = abk .
Solution de l’exercice 3
void *naive_search1(const void *pat, size_t patlen, const void *text,
size_t textlen) {
if (patlen == 0 || patlen > textlen) {
return NULL;
}
int c = ((const char *) pat)[0];
const char *t = text;
while (1) {
t = memchr(t, c, (size_t) ((const char *) text + textlen - patlen + 1 - t));
if (t == NULL) {
return NULL;
}
if (memcmp(t + 1, (const char *) pat + 1, patlen - 1) == 0) {
return (void *) t;
}
++t;
}
}
Université de Rouen Normandie Master Informatique
UFR Sciences et Techniques 2017-2018
Algorithmique du texte
Contrôle continu no 2
Date : 19 décembre 2017. Durée : 1 h. Documents, baladeurs, casques audio, oreillettes,
calculatrices, mobiles, tablettes, portables... interdits. Le barème est donné à titre indicatif.
Exercice 1 (6 points.)
Pour le mot x = aabaaabaacaa :
1) Dressez, dans un même tableau, les tables bon-préf et meil-préf de x.
2) Dessinez l’automate de Simon, c’est-à-dire l’automate complet déterministe qui reconnait
l’ensemble des mots de suffixe x mais qui est privé de ses flèches nulles. Vous adjoindrez à l’étiquette
a de chacune des flèches arrière (p, a, q) son décalage défini comme la quantité |p| − |q| + 1.
3) Pour chacun des trois algorithmes Morris-Pratt (table bon-préf ), Knuth-Morris-Pratt (table
meil-préf ) et Simon, déterminez, pour chaque indice k sur le mot x, le délai en k, c’est-à-dire le
nombre maximal de comparaisons effectuées sur une lettre quelconque du texte dans lequel les
occurrences de x sont cherchées lorsque cette lettre est comparée initialement à x[k]. Présentez
les résultats sous la forme d’un tableau d’entrées les algorithmes et les indices k.
Exercice 2 (8 points.)
Pour le mot x = aacaabaabaa :
1) Donnez les tables bon-suff et dern-occ.
2) Donnez les décalages appliqués à la fenêtre glissante lorsque le contenu de cette dernière
se termine par :
a) b ;
b) c ;
c) d ;
d) ba ;
e) ca ;
f) da ;
g) caa ;
h) daa ;
i) caabaa ;
j) daabaa.
Ne vous contentez pas de donner la valeur du décalage : énoncez dans chacun des cas le calcul en
faisant explicitement apparaitre les identificateurs max, bon-suff et dern-occ.
Exercice 3 (6 points.)
On cherche coder une fonction capable de renvoyer, de tout caractère fourni, sa catégorie :
espace, chiffre, majuscule, minuscule, ponctuation, autre.
On dispose de fonctions booléennes qui permettent de tester avec des couts identiques les
appartenances aux cinq premières catégories ; elles ont pour identificateur est-espace, est-chiffre,
est-majuscule, est-minuscule et est-ponctuation. On suppose que les fonctions peuvent être com-
posées avec l’opérateur ∨ pour en former de plus puissantes sans pour autant augmenter le cout
du test : si c est un caractère et que l’on veut tester s’il est un chiffre ou une majuscule, on a tout
intérêt à employer la forme
(est-chiffre ∨ est-majuscule)(c),
Algorithmique du texte
2017-2018 | 6