Td automates en ligne Théorie des langages-télécharger ...

Théorie des langages : Td automates en ligne

Télécharger PDF

option informatique

Corrigé : automates en ligne (X 1998)

Partie I.

Motifs et automates

Question 1.

a)Le motifcl?oufiltre les mots "cou" et "clou" ; le motifc?ou* coufiltre tous les mots débutant par "ou" ou par "cou" et

se terminant par "cou" à l’exception de "cou".

b) Le motif** filtre le motm= "abc" de deux façons différentes, avecm1 = "a" etm2 = "bc" oum1 = "ab" etm2 = "c".

c) Raisonnons par récurrence sur la longueur|p|du motifp.

–Si|p|= 0,pest le motif vide, doncp1 etp2 aussi. Le motmest nécessairement le mot vide, et il suffit de poserm 1=m 2

=εpour conclure.

–Si|p|>0, supposons le résultat acquis aux rangs inférieurs. Sip1 est le motif vide il suffit de poserm1 =εetm 2

=mpour conclure. Sip2 est le motif vide on pose cette foism1 =metm2 =ε. On suppose désormais que nip 1nip 2

n’est le motif vide, avec pour conséquence quepn’est pas un motif simple. Il se décompose donc sous

la formep=p3 p4 où nip3 nip4 n’est le motif vide, et puisquepfiltremil existe une factorisationm=m3 m4 de

mtelle quep3 filtrem3 etp4 filtrem4 .

Supposons|p1 |6|p3 |. D’après le lemme deLeviil existe un motifp′ tel quep3 =p1 p′ etp2 =p′ p4 . Par hypothèse

de récurrence appliquée àp3 il existe une factorisation dem3 sous la forme :m3 =m1 m′ telle quep1 filtrem 1etp ′filtrem ′

. Mais alorsp2 filtre le motm′ m4 . Posonsm2 =m′ m4 . Alorsp1 p2 filtre le motm1 m2 etm 1m 2=m 1m ′m 4=m 3m 4=m. Le cas où|p3 |6|p1 |se traite de la même façon.

d) Les motifs* ?et** sont équivalents à* qui est de poids minimal puisque le motif vide ne filtre que le mot vide.

Le motifa???est équivalent àa?car ces deux motifs ne filtrent que les motsεet "a", et le second motif est de poids

minimal car aucun motif de poids égal à 1 ne peut filtrer ces deux mots et uniquement ceux-ci.

Question 2.

a)Sipest un motif simple il est équivalent àα,∗ou àα? oùαdésigne une lettre quelconque de l’alphabet, et les

automates associés sont représentés ci-dessous.01 α

Figure1 – L’automateA(α).0 ∗

Figure2 – L’automateA(∗).01 αε Figure3 – L’automateA(α?).

b) Sipest le motif vide, l’automateA(∅) qui le reconnait est l’automate vide.c) Sip=p1 p2 , soitA(p1 ) etA(p2 ) deux automates qui reconnaissent respectivementp1 etp2 et dont les états sont

distincts. On construit l’automateA(p) en identifiant l’état final deA(p1 ) avec l’état initial deA(p2 ) (ou en les reliant

par une transition instantanée).

d) Enfin, l’automate associé au motifc?ou* couest représenté ci-dessous.0123 456 cε ouc∗ ou

Figure4 – L’automateA(c?ou* cou).

page 1

Question 3.Commençons par observer que siaest un entier qui code un ensemble d’étatsAetαune lettre alorsb α

= (a∧Nα )1 code l’ensemble des états atteints après une transition étiquetée parα.

Observons ensuite queb∗ =a∧N∗ code l’ensemble des états atteints après une transition étiquetée par∗.

α(A) est donc représenté par l’entierb=bα ∨b∗ .

Observons enfin que sibi est un ensemble d’états,bi+1 =bi ∨((bi ∧Nε )1)code l’ensemble des états atteints après une

transition instantanée. Considérons donc la suite définie par :b 0=betb i+1=b i∨((b i∧N ε)1) Cette suite est croissante donc stationnaire puisque majorée par2n −1 oùndésigne le nombre d’états de l’automate. Salimitea ′

représente l’ensemble des étatsε(α(A)) = A′ .

Partie II.

Reconnaissance de motifs

Question 4.Pour calculer plus aisément le code d’un caractèrecdans le tableaualphail peut être utile de définir la

fonction :

letindice c = int_of_char c−int_of_char ‘a‘ ;;

qui indique l’indiceidu tableaualphaoù se trouve rangé l’entier Nc .

a) D’après la question 3 les deux fonctions demandées peuvent être définies comme suit :

letmange états c =

letb1 = (états land (alpha.(indice c))) lsl 1andb2 = états land !etoilein

b1 lor b2 ;;

let recferme états =

lete = états lor ((états land !epsilon) lsl 1)in

ifétats = etheneelseferme e ;;

b) Toujours d’après cette même question, on obtient le code de l’état A′ =ε(α(A)) à l’aide de la fonction :

letetape états c = ferme (mange états c) ;;

c)Sachant que les opérations sur les nombres entiers sont de coût constant, la fonctionmangeest de coût constant.

Lorsque le motifpne contient pas le caractère?le coût de la fonctionetapeest donc lui aussi constant.

Le coût de la fonctionfermeest linéaire en le nombre de transitions instantanées consécutives présentes dans le

motifp. Ce nombre est majoré par|p|donc dans le cas général le coût de la fonctionetapeest un O(|p|).d) La présence de l’étaten−1 parmi l’ensemble d’étatsAreprésenté par l’entierb= (bi ) est caractérisé par l’égalitéb n−1

= 1. Sachant que 1(n−1) = (00···001 00···00

︸ ︷︷ ︸n−1 )2 on définit la fonction :

letetat_final états = états land (1 lsl (!n_etats−1)) <> 0 ;;

Question 5.Pour respecter les spécifications de l’énoncé on peut définir :

exceptionEchecofstring ;;

letechoue s =raise(Echec s) ;;

a)Pour construire l’automateA(p) on parcourt les différents caractères qui composentpen gardant en mémoire le

dernier étatei créé.

Un caractère alphabétiqueαentraîne la création d’un nouvel étatei+1 et d’une transition alphabétique(ei , ei+1 ,α).

Un caractère∗entraîne la création d’une transition étoile(ei , ei ,∗). Un caractère?, s’il est précédé d’un caractère

alphabétique, entraîne la création d’une transition instantanée(ei , ei−1 ,ε) (ce qui supposei>1) ; dans les autres cas

il est ignoré. Tout autre caractère déclenche l’exceptionEchec.

Enfin, le nombre d’états est égal au nombre de caractères alphabétiques présents danspdonc la référencen_etats

est incrémentée à chaque fois qu’on en rencontre un.

page 2

letconstruire_auto p =

let recaux i k =

ifk <string_lengthpthen matchp.[k]with

| cwhenindice c >= 0 && indice c < 26−>

incr n_états ;

alpha.(indice c) <−alpha.(indice c) lor (1 lsl i) ;

aux (i+1) (k+1)

| ‘*‘−> etoile := !etoile lor (1 lsl i) ; aux i (k+1)

| ‘?‘whenk = 0−> echoue "motifinvalide"

| ‘?‘whenp.[k−1] = ‘?‘ || p.[k−1] = ‘*‘−> aux i (k+1)

| ‘?‘−> epsilon := !epsilon lor (1 lsl (i−1)) ; aux i (k+1)

| _−> echoue "motifinvalide"

infill_vect alpha 0 26 0 ;

etoile := 0 ; epsilon := 0 ; n_états := 1 ;

aux 0 0 ;;

b)Chacune des opérations qui précède les appels récursifs à la fonctionauxest de coût constant donc le coût de cette

construction est un O(|p|).

Question 6.

a)La fonction qui suit construit l’automate associé au motifp, calcule à partir de l’ensemble d’états initiauxA0 =ε({e0 })

l’ensemble d’états auquel on aboutit à la lecture du motm, puis détermine si l’état final se trouve parmi eux.

letfiltre p m =

let recaux états =function

| kwhenk =string_lengthm−> etats

| k−> aux (etape états m.[k]) (k+1)

inconstruire_auto p ; etat_final (aux (ferme 1) 0) ;;

b)Nous avons vu que le coût de la construction de l’automate est unO(|p|) et que le coût de la fonctionetapeest un

O(1)s’il n’y a pas de motif optionnel, unO(|p|) sinon. On en déduit que le coût de la fonctionfiltreest unO(|p|+|m|)

s’il n’y a pas de motif optionnel et un O(|p|·|m|) s’il en existe.

Question 7.

a) Posonsq=∗p∗; alorsqfiltremsi et seulement sipfiltre un sous-mot dem. D’où la fonction :

letfiltre_sous_mot p = filtre ("*" ^ p ^ "*") ;;

b)La lecture du préfixemi demaboutit à l’ensemble d’étatsAi doncpfiltremi si et seulement si l’état final deA(p) est

dans Ai .PosonsB 0=ε({e 0

}) etBi+1 =ε(αi (Bi ))∪B0 , et montrons par récurrence suriqueBi est l’ensemble des états auquel

peut aboutir la lecture d’un sous-motαj αj+1 ···αi−1 .

– Sii= 0 le sous-mot est vide et les états auquel on peut aboutir à partir de l’étate0 sontε({e0 }) = B0 .

–Sii>0 supposons le résultat acquis au rangi. Par hypothèse de récurrenceBi est l’ensemble des états auquel

aboutit la lecture d’un sous-motαj ···αi−1 doncε(αi (Bi )) est l’ensemble des états auquel aboutit la lecture d’un

sous-motnon videde la formeαj ···αi . Sachant queε({e0 }) =B0 est l’ensemble des états auquel aboutit la lecture

du sous-mot vide, on en déduit le résultat au rangi+ 1.

De ceci il résulte immédiatement qu’un sous-motαj ···αi−1 est filtré parpsi et seulement si l’état final deA(p)

appartient à Bi .

c)On construit l’automate associé au mot (qui est aussi un motif)spuis pour chaque valeur deion détermine si

un sous-mot demde la formemj ···mi−1 est reconnu par le motifs(notons que puisquesest uniquement formé

de caractères alphanumériques, un seul sous-mot de cette forme a une chance d’être reconnu, celui pour lequel

i−j=|s|).

Notons que puisqu’il n’y a pas de transition instantanée on a B0 ={e0 }et Bi+1 =αi (Bi )∪{e0 }.

page 3

letcompte_sous_mots s m =

construire_auto s ;

letb =ref1in

letnb =ref0in

fork = 0to string_lengthm−1do

b := etape !b m.[k] lor 1 ;

ifetat_final !bthenincr nb ;done; !nb ;;

d) Considérons le motifp=a?bet le motm=ab. L’automateA(p) est représenté ci-dessous :012 aε b

À la lecture du motmon aB0 ={0,1},B1 ={0,1}etB2 ={0,1,2}et seulB2 contient l’état final alors que deux

sous-mots demsont filtrés par le motifp:betab.

Question 8.

a)Pour détecter au plus un oubli il faut autoriser une transition instantanéeet une seuleentre deux états consécutifs de

A(μ). Ceci peut être représenté graphiquement en dupliquant les étatse1 , . . . , en−1 comme ci-dessous :012 n−1n 123n μ0 μ1 μn−1 μ1 μ2 εεεε

où on a notéμ=μ0 μ1 ···μn−1 les lettres deμ.

Considérons maintenant les lettresα0 ,α1 , . . . ,αk dem, et la suite d’états(Ai ) définie parA0 ={e0 }etAi+1 =αi (Ai ). Le

motmest reconnu sans erreur si et seulement sien ∈Ak (avec nécessairementk=n).

On pose ensuiteA1 0={e 1}etA 1i+1 =αi (A1 i

)∪succ(Ai ) oùsucc(Ai ) représente les successeurs des états contenus dansA i

. Alors le motmest reconnu avec un oubli si et seulement sien ∈A1 k

(avec cette foisk=n−1).

Le motmest donc reconnu avec au plus un oubli si et seulement sien ∈Ak ∪A1 k. b) Le cas d’une erreur quelconque peut être représenté par le diagramme ci-dessous :012 n−1n 0123n μ0 μ1 μn−1 μ0 μ1 μ2 ε, xε, xε, xε, xxxxx oùxreprésente un caractère quelconque. Les transitions(ei , ei , x) représentent des insertions, les transitions(ei , ei+1 , x)

des substitutions. La suite(A1 i

) doit être modifiée en posantA1 0={e 1}etA 1i+1 =αi (A1 i

)∪succ(Ai )∪Ai ∪succ(Ai+1 )

(le terme succ(Ai ) autorise un oubli, Ai une insertion, succ(Ai+1 ) une substitution).

c) Si l’ensemble d’états A est représenté par l’entiern, on a succ(A) =n1. D’où la fonction :

letfiltre_erreur mu m =

construire_auto mu ;

leta =ref1anda1 =ref2in

fork = 0to string_lengthm−1do

letx = !ain

a := etape x m.[k] ;

a1 := (etape !a1 m.[k]) lor (x lsl 1) lor x lor (!a lsl 1)done; etat_final (!a lor !a1) ;;

page 4

d)Enfin, en combinant la démarche établie aux questions 7.b-c avec celle établie aux questions 8.b-c on obtient la

fonction :

letsous_mot_erreur mu m =

construire_auto mu ;

leta =ref1anda1 =ref2in

letrep =reffalsein

fork = 0to string_lengthm−1do

letx = !ain

a := etape x m.[k] lor 1 ;

a1 := (etape !a1 m.[k]) lor (x lsl 1) lor x lor (!a lsl 1) lor 2 ;

rep := !rep || etat_final (!a lor !a1)done; !rep ;;

  page 5

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2