Vous êtes sur la page 1sur 14

A 2013 INFO.

MP
ECOLE DES PONTS PARISTECH, SUPAERO (ISAE), ENSTA PARISTECH, TELECOM PARISTECH, MINES PARISTECH, MINES DE SAINT-ETIENNE, MINES DE NANCY, TELECOM BRETAGNE, ENSAE PARISTECH (FILIERE MP) ECOLE POLYTECHNIQUE (FILIERE TSI)
CONCOURS 2013

EPREUVE dINFORMATIQUE Filire : MP


Dure de lpreuve : 3 heures. Lutilisation dune calculatrice est autorise.
Sujet mis la disposition des concours : CYCLE INTERNATIONAL, ECOLES DES MINES, TELECOM SUDPARIS, TPE-EIVP.

Lnonc de cette preuve comporte 14 pages. Les candidats sont pris de mentionner de faon apparente sur la premire page de la copie : INFORMATIQUE - MP Recommandations aux candidats Si, au cours de lpreuve, un candidat repre ce qui lui semble tre une erreur dnonc, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives quil est amen prendre. Tout rsultat fourni dans lnonc peut tre utilis pour les questions ultrieures mme sil na pas t dmontr. Il ne faut pas hsiter formuler les commentaires qui semblent pertinents mme lorsque lnonc ne le demande pas explicitement.

Composition de lpreuve Lpreuve comporte un seul problme.

Page 1 sur 14

preuve dinformatique 2013 Prliminaire concernant la programmation. Il faudra crire des fonctions ou des procdures laide dun langage de programmation qui pourra tre soit Caml, soit Pascal, tout autre langage tant exclu. Indiquer en dbut de problme le langage de programmation choisi ; il est interdit de modifier ce choix au cours de lpreuve. Certaines questions du problme sont formules diffremment selon le langage de programmation ; cela est indiqu chaque fois que ncessaire. Par ailleurs, pour crire une fonction ou une procdure en langage de programmation, le candidat pourra dfinir des fonctions ou des procdures auxiliaires quil explicitera, ou faire appel dautres fonctions ou procdures dfinies dans les questions prcdentes. Dans lnonc du problme, un mme identificateur crit dans deux polices de caractres diffrentes dsigne la mme entit, mais du point de vue mathmatique pour la police crite en italique (par exemple : p ) et du point de vue informatique pour celle crite en romain (par exemple : p). Le but du sujet est dtudier plusieurs algorithmes de recherche dun mot, appel motif, dans un texte. Un alphabet est un ensemble fini dlments appels lettres. Un mot sur est une suite finie, ventuellement vide, de lettres de ; la longueur dun mot u est le nombre de lettres composant u ; le mot de longueur nulle est not . Lensemble des mots sur est not *. Lalphabet utilis est un sous-ensemble de lalphabet usuel compos des 26 lettres de a z. Si u est un mot, on note l(u) la longueur de u ; la notation ui dsigne la (i + 1)e lettre de u. Le mot u scrit donc : u = u0u1ul(u) 1. On dit que la lettre ui est la position i. On dit quun mot f sur est un facteur dun mot u sur sil existe deux mots v et w sur avec u = vfw, o vfw dsigne le mot obtenu en concatnant v, f et w ; on appelle alors position de f lindice de u o f commence ; on dit que f figure dans u la position l(v). Si v est le mot de longueur nulle, on dit que f est un prfixe de u ; si w est le mot de longueur nulle, on dit que f est un suffixe de u. Il peut exister dans un mot plusieurs occurrences dun mme facteur. Le mot de longueur nulle, , est considr comme tant prfixe et suffixe de tout mot. Dans tout lnonc, on considre deux mots t et m sur un alphabet de longueurs non nulles, appels respectivement texte et motif. On suppose que toute lettre de lalphabet apparat au moins une fois dans t. On veut rsoudre le problme (P) suivant : (P) dterminer la position de chaque occurrence de m dans t. On supposera toujours quon a : l(m) l(t) ; on ne vrifiera pas cette condition dans la programmation. Par exemple, quand m = abab et t = aaabababbbbababbbaa, m est un facteur de t et figure aux positions 2, 4 et 11. Indications pour la programmation Caml Les mots sont cods en utilisant le type string de Caml. Si u est de type string et si i est un entier correspondant un indice dune lettre de u, string_length u renvoie le nombre de lettres de u et u.[i] est le caractre se trouvant dans u lindice i. Fin des indications pour Caml

Page 2 sur 14

preuve dinformatique 2013 Pascal On utilise les dfinitions suivantes : const MAX_LONGUEUR = 100; const MAX_SIGMA = 26; type tab_char = array[0 .. MAX_LONGUEUR - 1] of char; type tab_int_sigma = array[0 .. MAX_SIGMA - 1] of integer; type pile = RECORD nb : integer; table : array[0 .. MAX_LONGUEUR - 1] of integer; end; La constante MAX_LONGUEUR donne la longueur maximum des mots considrs. La constante MAX_SIGMA donne le nombre maximum de lettres de lalphabet. Les mots sont toujours cods en utilisant des tableaux de type tab_char ; les lettres du mot sont crites conscutivement dans ce tableau partir de lindice 0. Fin des indications pour Pascal

Premire partie : algorithme simple


1 Soit s un entier positif ou nul vrifiant la relation s + l(m) l(t). Il sagit dcrire une fonction est_present qui permette de savoir si m figure dans t la position s. La fonction parcourt les lettres du motif m de la gauche vers la droite et arrte la recherche ds que possible. Caml : crire en Caml une fonction nomme est_present telle que, si : m et t, de type string, codent m et t, s code lentier s, alors est_present m t s renvoie le boolen true si m figure dans t la position s et le boolen false dans le cas contraire. Pascal : crire en Pascal une fonction nomme est_present telle que, si : m et t, de type tab_char, contiennent m et t, lm, de type integer, contient la longueur de m, s, de type integer, contient la valeur de s, alors est_present(m, lm, t, s) renvoie le boolen true si m figure dans t la position s et le boolen false dans le cas contraire. 2 Prciser la complexit de la fonction est_present dans le pire cas et le meilleur cas. 3 Il sagit dcrire une fonction nomme positions qui rsout le problme (P) en utilisant la fonction est_present. Caml : crire en Caml la fonction positions telle que si m et t, de type string, codent m et t, alors positions m t renvoie une liste contenant les positions de m dans t.

Page 3 sur 14

preuve dinformatique 2013 Pascal : crire en Pascal la fonction positions telle que si : m et t, de type tab_char, contiennent m et t, lm et lt, de type integer, contiennent les longueurs de m et t, alors positions(m, lm, t, lt) renvoie un rsultat de type pile contenant, dans le champ (ou membre) nb, le nombre de positions de m dans t et, dans le champ table, la liste des positions de m dans t. 4 Prciser, pour une valeur de l(t) 1 quelconque et l(m) l(t) quelconque, la complexit dans le pire cas de la fonction positions ; on exprimera cette complexit en fonction de l(t) et l(m). Donner un exemple de deux mots m et t pour lesquels cette complexit est atteinte.

Deuxime partie : une amlioration de la mthode prcdente


Dans la recherche simple, lorsque la recherche du motif m en position s est termine, on poursuit la recherche en position s + 1. On peut amliorer cet algorithme en poursuivant si possible la recherche un peu plus loin dans le texte t ; pour cela, on suit la mthode dcrite plus bas nomme algorithme amlior. On note nb_ le cardinal de . On numrote les lettres de de 0 nb_ 1. On suppose que lon a dfini en langage de programmation une fonction numero telle que : en Caml, si x, de type char, code une lettre x de , numero x renvoie le numro de la lettre x dans ; en Pascal, si x, de type char, code une lettre x de , numero(x) renvoie une valeur de type integer donnant le numro de la lettre x dans . On ne demande pas dcrire en langage de programmation la fonction numero. On suppose que cette fonction a une complexit constante. On introduit un tableau D dentiers dfini comme suit. Si lentier k vrifie 0 k nb_ 1, la case dindice k du tableau D contient la position de la dernire occurrence de la lettre de numro k dans le motif m. Par convention, si cette lettre nest pas prsente dans le motif m, cette position est gale 1. Par exemple, pour = {a, b, c} et pour le motif bbaa, on a nb_ = 3, le numro de la lettre a est 0, celui de la lettre b est 1, celui de la lettre c est 2 et le tableau D contient : dans la case dindice 0, la valeur 3, dans la case dindice 1, la valeur 1, dans la case dindice 2, la valeur 1. 5 Il sagit de construire le tableau D en un temps linaire en la longueur l(m) du motif m. On justifiera la complexit linaire de la construction du tableau D. Caml : crire en Caml une fonction nomme calcul_D telle que, si : m, de type string, code le motif m, nbSigma contient le nombre de lettres de lalphabet , alors calcul_D m nbSigma renvoie un vecteur (ou tableau) codant le tableau D. Pascal : crire en Pascal une fonction nomme calcul_D telle que, si : m, de type tab_char, contient m, lm, de type integer, contient la longueur de m, nbSigma, de type integer, contient le nombre de lettres de lalphabet , Page 4 sur 14

preuve dinformatique 2013 alors calcul_D(m, lm, nbSigma) tab_int_sigma codant le tableau D. renvoie un tableau de type

Pour dcrire lalgorithme amlior, on introduit la notion de fentre de recherche. Cette fentre dpend dun indice vrifiant 0 l(t) l(m) ; cette fentre contient les l(m) lettres conscutives de t comprises entre les indices et + l(m) 1 ; ces lettres sont mises en regard avec les l(m) lettres du motif m. On dit alors que la fentre est la position . Dans lalgorithme, la fentre se dplace toujours de la gauche vers la droite ; le motif se dplace avec la fentre alors que le texte ne bouge pas. On considre lexemple dfini par : Exemple1 : t1 = ababbaaacabbaab m1 = bbaa Au dpart de lalgorithme amlior, = 0 et la fentre de recherche est en gris sur la figure 1. Indices t1 m1 0 a b 1 b b 2 3 4 5 6 7 8 9 10 a b a a a c a b b a a Figure 1 : fentre de recherche la position 0 11 b 12 a 13 a 14 b

On examine cette position de la fentre en comparant le facteur abab de t1 qui est dans la fentre avec le motif m1 qui est en regard et on constate que ce facteur nest pas une occurrence de m1 dans t1. On considre alors la lettre de t1 qui se trouve droite de la fentre de recherche ; cest la lettre b lindice 4 de t1 en gras sur la figure 1 ; on note cl cette lettre. On remarque que si on considre la fentre de recherche positionne lindice 1 ou lindice 2, la lettre du motif m1 qui se trouve en regard de cl nest pas la lettre b, cest la lettre a dans les deux cas : lexamen de ces deux positions de la fentre ne permettrait pas de dcouvrir une occurrence du motif dans le texte. Cest pourquoi on nexamine pas les positions 1 et 2 de la fentre. En revanche, si on met la fentre en position 3, cl est en regard de la dernire apparition de la lettre b dans m1, en gras sur la figure 1 ; on retient cette position pour savoir si le motif figure on non lindice 3 du texte. La fentre de recherche est maintenant en gris sur la figure 2 : Indices t1 m1 0 a 1 b 2 a 3 4 5 6 7 8 9 10 b b a a c a b a b b a a Figure 2 : fentre de recherche la position 3 11 b 12 a 13 a 14 b

On examine la fentre et on constate que t1 contient une occurrence de m1 la position 3. Maintenant, cl est la lettre de t1 qui se trouve lindice 7 en gras sur la figure 2 : il sagit de la lettre a. On dplace la fentre pour que cl se trouve en regard de la dernire occurrence de la lettre a dans m1, en gras sur la figure 2 ; on dplace en consquence la fentre dune seule case, elle se trouve alors la position 4 et est reprsente sur la figure 3. On examine la fentre et on constate que t1 ne contient pas une occurrence de m1 lindice 4.

Page 5 sur 14

preuve dinformatique 2013 Indices t1 m1 0 a 1 b 2 a 4 5 6 7 8 9 10 b a a a a b c b b a a Figure 3 : fentre de recherche la position 4 3 b 11 b 12 a 13 a 14 b

On continue avec le mme principe pour trouver dautres ventuelles occurrences de m1 dans t1. Maintenant, cl est la lettre de t1 qui se trouve lindice 8, en gras sur la figure 3 : il sagit de la lettre c. Le dplacement suivant consistera dcaler la fentre vers la droite en nexaminant pas les positions qui mettraient en regard de cl une lettre de m1 diffrente de la lettre c. 6 Dans lexemple de la figure 3, indiquer la prochaine position de la fentre de recherche et dire si cette position correspond ou non une occurrence de m1 dans t1. 7 Dcrire la suite du droulement de lalgorithme appliqu Exemple1 jusqu ce quon puisse conclure que toutes les occurrences de m1 dans t1 ont t dtermines. On poursuivra les dplacements de la fentre vers la droite en utilisant le mme principe que prcdemment. 8 On revient au droulement de lalgorithme amlior dans le cas gnral. On suppose que la fentre est la position et que lon a l(t) > + 2l(m). En utilisant le tableau D et la fonction numero dcrits plus haut, indiquer la position suivante de la fentre. 9 Il sagit dcrire une fonction positions2 qui rsout le problme (P) en appliquant lalgorithme amlior. Caml : crire en Caml la fonction positions2 telle que si : m et t, de type string, codent m et t, nbSigma contient le nombre de lettres de lalphabet , alors positions2 m t nbSigma renvoie une liste contenant les positions de m dans t dtermines selon lalgorithme amlior. Pascal : crire en Pascal la fonction positions2 telle que si : m et t, de type tab_char, contiennent m et t, lm et lt, de type integer, contiennent les longueurs de m et t, nbSigma, de type integer, contient le nombre de lettres de lalphabet , alors positions2(m, lm, t, lt, nbSigma) renvoie un rsultat de type pile contenant, dans le champ nb, le nombre de positions de m dans t et, dans le champ table, la liste des positions de m dans t dtermines selon lalgorithme amlior. 10 Prciser, en fonction de l(t) et l(m), la complexit dans le meilleur cas de la fonction positions2. On ne prendra pas en compte la complexit du calcul du tableau D. Donner un exemple qui atteint cette complexit. Dans toute la suite, on se propose de rsoudre le problme (P) laide dautomates. Un automate A est dcrit par un quintuplet (, Q, I, F, T), o : est un alphabet ; Q est un ensemble fini et non vide appel ensemble des tats de A ; I Q est appel ensemble des tats initiaux de A ; Page 6 sur 14

preuve dinformatique 2013 F Q est appel ensemble des tats finals de A ; T Q Q est appel lensemble des transitions ; tant donne une transition (p, x, q) T, on dit quelle va de ltat p ltat q et quelle est dtiquette x ; on pourra la noter p q ; on dit aussi que p est lorigine de la transition et q son extrmit.
0 1 k 1 p o, Un calcul de A est une suite de la forme p0 p1 p2 pk 1 k i pour 0 i k 1, pi pi+1 est une transition ; p0 est lorigine du calcul, pk son extrmit. Ltiquette du calcul est le mot x0x1x2xk 1 form par la suite des tiquettes des transitions successives. Un calcul de A est dit russi si son origine est dans I et son extrmit dans F. Un mot m sur est reconnu par A sil est ltiquette dun calcul russi. Le langage reconnu par A, not L(A), est lensemble des mots reconnus par A.

Lautomate A est dit dterministe si I contient exactement un lment et si, pour tout p Q et tout x , il existe au plus un tat q Q avec (p, x, q) T. Lautomate A est dit complet si, pour tout p Q et tout x , il existe au moins un tat q Q avec (p, x, q) T. Si A est un automate dterministe complet, on dfinit sa fonction de transition de (Q ) dans Q par : (p, x) = q si et seulement si (p, x, q) T. On dfinit alors, rcursivement, une fonction * de (Q *) dans Q par : si p Q, *(p, ) = p, si p Q, u * et x , *(p, ux) = ( *(p, u), x). Dans tout le sujet, les automates considrs auront un seul tat initial. On notera nbQ le nombre dtats dun automate ; les tats seront numrots de 0 nbQ 1. Ltat initial possdera toujours le numro 0. Si p est le numro dun tat, on dira quil sagit de ltat p, identifiant ainsi un tat avec son numro. Un automate peut tre reprsent par un dessin comme il est fait ci-dessous pour reprsenter lautomate Aex, qui est dterministe et non complet. Aex possde trois tats : 0, 1 et 2. Ltat 0 est ltat initial. Aex possde un seul tat final, ltat 2. Aex possde trois transitions, les transitions (0, a, 1), (1, a, 1) et (1, b, 2).
a
a

Figure 4 : lautomate Aex

Troisime partie : implmentation dun automate


Lautomate Aex reprsent sur la figure 4 sert dexemple ci-dessous pour illustrer le codage dun automate en langage de programmation.

Indications pour Caml On utilise une constante dfinie par : let MAX_Q = 100 ;; MAX_Q donne le nombre maximum dtats des automates considrs. Page 7 sur 14

preuve dinformatique 2013 Pour reprsenter lensemble des tats finals dun automate, on utilise une liste, de type int list, qui contient les numros des tats finals. Si p est un tat dun automate, une transition dorigine p est code par un couple de type (char * int) contenant ltiquette de cette transition et le numro de lextrmit de cette mme transition. Si p est un tat dun automate, on reprsente lensemble des transitions dorigine p par la liste des transitions dorigine p ; cette liste est de type (char * int) list. Lensemble des transitions dun automate A est cod par un vecteur ; si p vrifie les ingalits 0 p nbQ 1, llment dindice p de ce vecteur contient la liste des transitions dorigine p. Ce vecteur est ainsi en Caml de type (char * int) list vect. Pour dfinir un automate A, on utilise le type enregistrement (type produit) suivant : type automate = {nbQ : int; F : int list; T : (char * int) list vect; };; dans lequel les champs (ou membres) correspondent : pour nbQ, au nombre dtats de A, pour F, la liste des tats finals de A, pour T, lensemble des transitions de A. Lautomate Aex de la figure 4 peut tre dfini par : let T_Aex = make_vect 3 [];; T_Aex.(0) <- [(`a`,1)]; T_Aex.(1) <- [(`a`,1); (`b`,2)];;

let Aex = {nbQ = 3 ; F = [2]; T = T_Aex};; Fin des indications pour Caml Indications pour Pascal On ajoute les dfinitions suivantes aux dfinitions donnes plus haut : const MAX_Q = 100; type transition = RECORD etiquette : char; extremite : integer; end; type tab_int_Q = array[0 .. MAX_Q - 1] of integer; type tab_transition = array[0 .. MAX_SIGMA - 1] of transition; type tab_tab_transition = array[0 .. MAX_Q - 1] of tab_transition; type automate = RECORD nbQ : integer; nbF : integer; F : tab_int_Q; nbT : tab_int_Q; T : tab_tab_transition; end; La constante MAX_Q donne le nombre maximum dtats des automates considrs.

Page 8 sur 14

preuve dinformatique 2013 Si p est un tat dun automate, une transition dorigine p est code par un enregistrement de type transition, le champ (ou membre) etiquette contenant ltiquette de cette transition et le champ extremite le numro de lextrmit de cette mme transition. Si p est un tat dun automate, on reprsente lensemble des transitions dorigine p en utilisant un tableau de type tab_transition (on ne codera que des automates dterministes avec le type automate). Lensemble des transitions dun automate est cod par un tableau de type tab_tab_transition, la case dindice p de ce tableau contenant la liste des transitions dorigine p. Un automate dterministe A sera cod par un enregistrement de type automate dans lequel les champs (ou membres) correspondent : pour nbQ, au nombre dtats de A ; pour nbF, au nombre dtats finals de A ; pour F, un tableau contenant la liste des tats finals de A ; pour nbT, un tableau donnant les nombres de transitions issues de chaque tat ; plus prcisment, si p est compris entre 0 et nbQ 1, nbT[p] contient le nombre de transitions dorigine p ; pour T, lensemble des transitions de A. Lautomate Aex de la figure 4 peut tre dfini par une variable Aex de type automate avec les instructions : Aex.nbQ := 3; Aex.nbF := 1; Aex.F[0]:= 2; Aex.nbT[0] := 1; Aex.T[0][0].etiquette := 'a'; Aex.T[0][0].extremite := 1; Aex.nbT[1] := 2; Aex.T[1][0].etiquette := 'a'; Aex.T[1][0].extremite := 1; Aex.T[1][1].etiquette := 'b'; Aex.T[1][1].extremite := 2; Aex.nbT[2] := 0; Fin des indications pour Pascal Soit A un automate dterministe sur un alphabet .

11 Il sagit de savoir si un tat est final ou non. On rappelle quun tat est identifi avec son numro. Caml : crire en Caml une fonction nomme est_final telle que si : A, de type automate, code lautomate A, p est un entier codant un tat de A, alors est_final A p renvoie le boolen true si p est un tat final de A et false sinon. Indiquer la complexit de cette fonction. Pascal : crire en Pascal une fonction nomme est_final telle que si : A, de type automate, code lautomate A, p, de type integer, contient un tat de A, alors est_final(A, p) renvoie un boolen qui vaut true si p est un tat final de A et false dans le cas contraire. Indiquer la complexit de cette fonction.
Page 9 sur 14

preuve dinformatique 2013

12 On suppose que p est un tat et x une lettre ; on veut connatre ltat q atteint partir de ltat p par la transition dtiquette x si cette transition existe. On rappelle que le cardinal de lalphabet est major par une constante (gale 26). Caml : crire en Caml une fonction nomme etat_suivant telle que si : A, de type automate, code lautomate A, p est un entier codant un tat de A, x est une lettre appartenant , alors etat_suivant A p x renvoie un entier codant ltat q tel que (p, x, q) soit une transition de A si cette transition existe et -1 sinon. Indiquer la complexit de cette fonction. Pascal : crire en Pascal une fonction nomme etat_suivant telle que si : A, de type automate, code lautomate A, p, de type integer, contient le numro dun tat de A, x, de type char, contient une lettre appartenant , alors etat_suivant(A, p, x) renvoie une valeur de type integer contenant ltat q tel que (p, x, q) soit une transition de A si cette transition existe et -1 sinon. Indiquer la complexit de cette fonction. 13 Il sagit de dterminer ltat, sil existe, qui est extrmit du calcul dont lorigine est ltat initial et dont ltiquette est un mot donn. Caml : crire en Caml une fonction nomme execution telle que si : A, de type automate, code lautomate A, u, de type string, code un mot u sur , alors execution A u renvoie un entier codant ltat q qui est lextrmit du calcul dont lorigine est ltat initial et dont ltiquette est u, si q existe, et -1 sinon. Indiquer la complexit de cette fonction. Pascal : crire en Pascal une fonction nomme execution telle que si : A, de type automate, code lautomate A, u, de type tab_char, contient un mot u sur , lu, de type integer, contient la longueur de u, alors execution(A, u, lu) renvoie une valeur de type integer donnant ltat q qui est extrmit du calcul dont lorigine est ltat initial et dont ltiquette est u, si q existe, et -1 sinon. Indiquer la complexit de cette fonction. 14 Il sagit de savoir si un mot est reconnu ou non par un automate. Caml : crire en Caml une fonction nomme reconnait telle que si : A, de type automate, code lautomate A, u, de type string, code le mot u sur , alors reconnait A u renvoie le boolen true si le mot u est reconnu par A et false sinon. Indiquer la complexit de cette fonction. Pascal : crire en Pascal une fonction nomme reconnait telle que si : A, de type automate, code lautomate A, u, de type tab_char, contient le mot u sur , lu, de type integer, contient la longueur de u, alors reconnait(A, u, lu) renvoie le boolen true si le mot u est reconnu par A et false sinon. Indiquer la complexit de cette fonction.
Page 10 sur 14

preuve dinformatique 2013

15 On considre un automate A dterministe complet sur un alphabet , un tat p de A et une lettre x de . Lobjectif de la question est de concevoir une fonction permettant de modifier lextrmit de la transition dorigine p et dtiquette x. Caml : On considre une liste, nomme trans, de type (char * int) list, codant lensemble des transitions dorigine p. crire en Caml une fonction remplace telle que, si : x code la lettre x, q code un tat de A, alors remplace x trans q renvoie une liste identique trans sauf que le couple contenant ltiquette x est remplac par le couple (x, q). Indiquer la complexit de cette fonction. Pascal : On considre un tableau, nomm trans, de type tab_transition, codant lensemble des transitions dorigine p. crire en Pascal une fonction remplace telle que, si : x, de type char, contient la lettre x, q, de type integer, contient un tat de A, alors remplace(x, trans, q) renvoie un tableau de type tab_transition identique trans sauf que le couple contenant ltiquette x est remplac par le couple (x, q). Indiquer la complexit de cette fonction.

Quatrime partie : utilisation dautomates.


On considre un mot m sur : m = m0m1...ml(m) 1.

16 Dessiner un automate dterministe comportant l(m) + 1 tats reconnaissant le langage rduit au seul mot m. On note Am cet automate. 17 Il sagit de construire lautomate Am en langage de programmation. Caml : crire en Caml une fonction nomme automate_de_mot telle que, si m, de type string, code le mot m, alors automate_de_mot m renvoie un rsultat de type automate codant lautomate Am. Pascal : crire en Pascal une fonction nomme automate_de_mot telle que, si : m, de type tab_char, contient le mot m, lm, de type integer, contient la longueur de m, alors automate_de_mot(m, lm) renvoie un rsultat de type automate codant lautomate Am. 18 Il sagit dutiliser lautomate Am pour dterminer si un mot u sur est prfixe du mot m. Caml : crire en Caml une fonction nomme est_prefixe telle que, si m et u, de type string, codent les mots m et u, alors est_prefixe m u renvoie le boolen true quand u est prfixe de m et false dans le cas contraire. On utilisera les fonctions automate_de_mot et execution.

Page 11 sur 14

preuve dinformatique 2013

Pascal : crire en Pascal une fonction nomme est_prefixe telle que, si : m et u, de type tab_char, contiennent les mots m et u, lm et lu, de type integer, contiennent les longueurs de m et u, alors est_prefixe(m, lm, u, lu) renvoie le boolen true quand u est prfixe de m et false dans le cas contraire. On utilisera les fonctions automate_de_mot et execution. 19 On sintresse prsent au langage compos des mots dont m est suffixe. On le note LSm. Montrer que ce langage est rationnel. 20 Expliquer comment on peut modifier lensemble des transitions de Am pour obtenir un automate non dterministe reconnaissant LSm. On note ASm cet automate. On considre le cas o = {a, b} et m = ab. Dessiner lautomate ASab. 21 Dterminiser lautomate ASab dessin la question prcdente. On utilisera pour cela un algorithme de dterminisation dautomate.
Soit t un texte et m un motif. On note DSm un automate dterministe complet reconnaissant le langage LSm ; on suppose que DSm a un seul tat final.

22 Dcrire les principes dun algorithme utilisant lautomate DSm pour rsoudre le problme (P). Lalgorithme devra avoir une complexit de lordre de la longueur de t. Justifier la validit de cet algorithme avec soin. 23 Il sagit de programmer lalgorithme prcdent. Caml : On suppose que lon dispose dune fonction DS telle que, si m est de type string, alors DS m renvoie un rsultat de type automate codant lautomate DSm. En utilisant cette fonction, crire en Caml une fonction nomme positions3 telle que, si m et t, de type string, codent le motif m et le texte t, alors positions3 m t rsout le problme (P), cest--dire renvoie une liste contenant les positions du motif m dans le texte t. Pascal : On suppose que lon dispose dune fonction DS telle que, si : m, de type tab_char, contient le mot m, lm, de type integer, contient la longueur de m, alors DS(m, lm) renvoie un rsultat de type automate codant lautomate DSm. En utilisant cette fonction, crire en Pascal une fonction nomme positions3 telle que, si : m et t, de type tab_char, contiennent m et t, lm et lt, de type integer, contiennent les longueurs de m et t, alors positions3(m, lm, t, lt) rsout le problme (P), cest--dire renvoie un rsultat de type pile contenant, dans le champ nb, le nombre de positions de m dans t et, dans le champ table, la liste des positions du motif m dans le texte t.

Page 12 sur 14

preuve dinformatique 2013

Cinquime partie : automate des suffixes


Le but de cette la partie est dcrire un automate dterministe complet, avec un seul tat final, reconnaissant le langage LSm. On considre un alphabet et un mot m = m0m1...ml(m) 1 sur . On note Pref(m) lensemble des prfixes de m. Soit hm lapplication de * dans Pref(m) dfinie par : pour tout mot u sur , hm(u) est le plus long mot la fois suffixe de u et prfixe de m.

24 Prciser hm(u) pour tout mot u quand m est rduit une seule lettre x .
On revient au cas gnral : m est un mot quelconque sur .

25 Soit u *. Montrer que u LSm si et seulement si hm(u) = m. 26 Prciser hm(). Prciser hm(u) quand u est un prfixe de m. 27 Montrer que hm(ux) = hm(hm(u)x) pour tout mot u et toute lettre x.
On dfinit un automate dterministe et complet sur lalphabet , not Sm, de la faon suivante : les tats de Sm sont les prfixes de m, ltat initial de Sm est , ltat final de Sm est m, pour tout prfixe u de m et toute lettre x, (u, x, hm(ux)) est une transition de Sm et Sm nadmet pas dautres transitions que les transitions de cette forme. Convention : on numrote les tats de Sm ; ltat initial est not 0 et pour i compris entre 1 et l(m), le prfixe m0m1...mi 1 est not i.

28 On suppose que lon a = {a, b}. Dessiner lautomate S. Indication : cet automate na quun seul tat, not 0. 29 On suppose que lon a = {a, b} et on considre le mot ab. Dessiner lautomate Sab en reprsentant les tats par leurs numros. Indication : cet automate a trois tats, les tats , a, ab, numrots 0, 1 et 2. 30 On considre lautomate Sm et un mot u sur ; on note la fonction de transition de Sm. Montrer lgalit *(, u) = hm(u). 31 Montrer que Sm reconnat le mme langage que DSm, cest--dire LSm.

Page 13 sur 14

preuve dinformatique 2013 Soit m un mot sur et x une lettre de . On pose m' = mx. On note h = hm et h' = hm'. On admet les proprits suivantes de la fonction h'. Soit u' un prfixe de m' et y une lettre. (i) Si u' est prfixe de m et u' m : h'(u'y) = h(u'y). (ii) Si u' = m : h'(my) = h(my) quand y x et h'(mx) = mx. (iii) Si u' = m' : h'(m'y) = h'(h(mx)y).

32 Donner des rgles simples de construction pour passer de Sm Sm'. 33 On considre le cas = {a, b} et le mot aba. Illustrer les rgles nonces la question prcdente en traant lautomate Saba partir de lautomate Sab obtenu la question 29. 34 Il sagit de programmer la fonction DS pour lalphabet = {a, b}. Caml : crire en Caml une fonction nomme DS telle que, si m, de type string, code un mot m, alors DS m renvoie un rsultat, de type automate, codant lautomate Sm. On supposera si ncessaire quon a dfini une constante entire MAX_LONGUEUR et que les mots considrs ont au plus MAX_LONGUEUR lettres. Pascal : crire en Pascal une fonction nomme DS telle que, si : m, de type tab_char, contient le mot m sur , lm, de type integer, contient la longueur de m, alors DS(m, lm) renvoie un rsultat, de type automate, codant lautomate Sm. 35 On revient un alphabet quelconque. Donner la complexit de la fonction positions3.

Page 14 sur 14

Vous aimerez peut-être aussi