• Aucun résultat trouvé

Automates en ligne (X 1998)

N/A
N/A
Protected

Academic year: 2022

Partager "Automates en ligne (X 1998)"

Copied!
4
0
0

Texte intégral

(1)

option informatique

Automates en ligne (X 1998)

Durée : 3 heures

Partie I. Motifs et automates

Mots et motifs

Dans tout le problème, étant donné un ensembleEet un entier natureln, on définit un mot de longueurnsurEcomme une séquencem0α1· · ·αn1d’éléments deE(dans le casn= 0,mest le mot vide). Etant donnés deux entiers naturelsietk avec 06i < net 06i+k < n, le sous-mot demde longueurkpositionné eniest le motαiαi+1· · ·αi+k1. La concaténation de deux motsm0α1· · ·αn1etm000α01· · ·α0n01est le motm00=mm0000α001· · ·α00n+n01avecα00ii pouricompris entre 0 etn−1 etα00i0inpouricompris entrenetn+n0−1. Réciproquement,mest alors un préfixe dem00etm0un suffixe dem00.

Une lettreαest une lettre de l’alphabeta,b, . . . ,z. Un mot (alphabétique)mest un mot de lettres. Un motif simples est soit une lettreα, soit l’étoile∗, soit un motif optionnels0? oùs0est un motif simple. Un motifpest un mot de motifs simples. Par exemple,coucouest un mot et un motif, tandis quec?ou*couest un motif, ce dernier étant composé de sept motifs simplesc?,o,u,*,c,oetu.

Les motifs filtrent les mots au sens suivant : – le motif vide filtre le mot vide ;

– le motif lettreαfiltre le mot d’une lettreα; – le motif∗filtre tous les mots ;

– un motif simple optionnels? filtre les mêmes mots quesplus le mot vide ;

– un motifp1p2tel que nip1nip2ne sont le motif vide filtre les motsm1m2p1filtrem1etp2filtrem2. Question 1. On étudie quelques propriétés du filtrage.

a) Donner les mots filtrés par les motifscl?ouetc?ou*cou.

b) Trouver un motifpet un motmtel quepfiltremde deux façons distinctes, c’est-à-dire qu’il existe une décomposition p1p2depainsi que deux décompositions différentesm1m2etm3m4demtels quep1filtrem1etm3etp2filtrem2et m4.

c) Soit un motifp=p1p2et un motmtels quepfiltrem. Montrer qu’il existe deux motsm1etm2tels quep1filtrem1, p2filtrem2etm=m1m2.

d) Deux motifs sont dits équivalents quand ils filtrent les mêmes mots. Le poids d’un motif est le nombre de caractères qui le composent. Par exemple, le poids du motifc?ou*couest huit. Pour chacun des motifs*?,**eta???donner un motif équivalent de poids minimal.

Automates en ligne

Un automate en ligne ànétats est un couple (E,T) où E est une suite d’étatse0, e1, . . . , en1et T un ensemble de transitions.

Une transition est un triplet formé de deux états et d’une étiquette. On se limite à trois formes de transitions : – les transitions alphabétiques de la forme (ei, ei+1,α) oùαest une lettre ;

– les transitions étoile de la forme (ei, ei,∗) ;

– les transitions instantanées de la forme (ei, ei+1,ε).

Le problème ne traitera que des automates en ligne que l’on appelera tout simplement "automates". Un automate est donc un graphe dirigé dont les sommets sont les étatse0, e1, . . . , en1et les arcs sont les transitions. Voici par exemple un automate à cinq états :

0 c 1 l 2 3 4

ε

o u

Figure1 – Un exemple d’automate en ligne.

À cause des transitions étoile et des transitions instantanées les automates en ligne sont des automates non déterministes.

Une façon de traiter ce non-déterminisme est de considérer des ensembles d’états.

page 1

(2)

Pour tout ensemble d’états A, on définitε(A), la fermeture par transitions instantanées de A, comme le plus petit sur-ensemble de A qui obéit à la propriété suivante :

ei ∈ε(A) et (ei, ei+1,ε)∈T =⇒ei+1∈ε(A).

Un ensemble d’états est dit clos par transitions instantanées lorsqu’on aε(A) = A.

Étant donnés un ensemble d’états A et une lettreα, on noteα(A) l’ensemble : α(A) =n

ei

(ei1∈A et (ei1, ei,α)∈T) ou (ei∈A et (ei, ei,∗)∈T)o

Enfin, étant donnés un ensemble d’états A clos par transitions instantanées et une lettreα, on définit l’étape A→α A0en posant A0=ε(α(A)). Par exemple,{e0}→ {c e1, e2}est une étape de l’automate présenté figure 1.

La lecture d’un motm0α1· · ·αk1de longueurk>0 par un automateAànétats est la production de A0,A1, . . . ,Ak, suite d’ensembles d’états deAavec :

A0=ε({e0})→α0A1→ · · ·α1 αk1Ak.

On noteA[m] le dernier ensemble d’états Ak. Par définition, l’automateAreconnaît le motmquand son état finalen1

appartient àA[m]. Par exemple,{e0}→ {c e1, e2}→ {o e3}→ {u e4}est la reconnaissance du mot "cou" par l’automate dessiné figure 1.

Question 2. On demande de construire un automateA(p) qui reconnait les mots filtrés parpet seulement eux dans les cas suivants :

a) le motifpest un motif simple ; b) le motifpest vide ;

c) le motifpest composite :p=p1p2. d) Application : donnerA(c?ou*cou).

Implémentation machine des automates

La grande simplicité des automates en ligne autorise une implémentation efficace à l’aide d’entiers binaires, pourvu que leur nombre d’états soit suffisamment petit, condition que l’on supposera toujours vérifiée.

Un bit est 0 ou 1. Le représentation binaire surpbits d’un entiernest la suite depbits, notéebp1· · ·b1b0ou (bi), telle que l’on an=

p1

X

i=0

bi2i. Du point de vue de la machine, un entiernet sa représentation binaire sont identiques.

Outre l’arithmétique traditionnelle, un ordinateur fournit certaines opérations sur les entiers binaires. Le décalage dek bits à gauche (bi)kest la suite (ci) avecci = 0 pouri < ketci =bik autrement. Le "ou logique" (bi)∨(ci) est la suite (bici) où∨est le "ou binaire" défini par 0∨0 = 0, 1∨0 = 1, 0∨1 = 1, et 1∨1 = 1. Le "et logique" (bi)∧(ci) est la suite (bici) où∧est le "et binaire" défini par 0∧0 = 0, 1∧0 = 0, 0∧1 = 0, et 1∧1 = 1.

Un ensemble d’états A d’un automate ànétats avecn6psera implémenté en machine par un entier (bi) avecbi = 1 siei ∈A, les autres bits étant nuls. Les transitions de l’automate seront représentés de façon similaire par un certain nombre d’entiers, à raison d’un entier Nαpar lettreα, d’un entier Net d’un entier Nε. On pose Nα= (bi) avecbi = 1 si (ei, ei+1,α)∈T ; N= (bi) avecbi= 1 si (ei, ei,∗)∈T et Nε= (bi) avecbi= 1 si (ei, ei+1,ε)∈T (tous les bits non spécifiés sont nuls).

Par exemple, dans le cas de l’automate présenté figure 1 et représentable sur cinq bits, il y a quatre entiers non nuls, à savoir Nc= 00001, Nl= 00010, No= 00100, Nu= 01000 ; en outre on a N= 00000 (il n’y a aucune transition étoile) et Nε= 00010 (il existe une transition instantanée dee1verse2). L’étape{e0}→ {c e1, e2}est la transformation de 00001 et 00110.

Question 3. Etant donnés un automate ànétats implanté en machine par les entiers Nα, Net Nε, un ensemble d’états A clos par transitions instantanées codé par un entieraet une lettreα, donner une méthode de calcul dea0, l’entier qui encode A0 tel que A→α A0. On n’oubliera pas que A0est, par définition, clos par transitions instantanées.

Partie II. Reconnaissance de motifs

Les mots et les motifs sont représentés en machine par des chaînes de caractères. Formellement les chaînes (de type string) sont des mots sur l’ensemble des caractères de la machine (de typechar). On rappelle quelques primitives sur les caractères

page 2

(3)

et les chaînes. La fonctionint_of_charde typechar > intrenvoie le code du caractère passé en argument. La fonction char_of_intréalise l’opération inverse. Il est à noter que les codes des lettres de l’alphabet sont consécutifs. La fonction string_lengthde type string −> intrenvoie la longueur de la chaîne passée en argument. l’opération primitives1 ^ s2 produit une nouvelle chaîne qui est la concaténation des1ets2. Étant donnés une chaînesde longueurnet un entieri avec 06i < nla notations.[i]désigne le caractère d’indiceide la chaînes(enCamll’indice du premier caractère dans une chaîne est zéro).

Le décalage à gauche est réalisé par la primitivelsl, le "ou logique" par la primitiveloret le "et logique" par la primitiveland. Ces trois primitives sont de typeint −> int −> int. On rappelle que lers entiers machine sont toujours assez grands pour pouvoir représenter les ensembles d’états des automates. En outre, on ne se préoccupera pas d’éventuelles erreurs dues aux débordements de capacité.

Comme on l’a déjà vu, un automate est la donnée d’une taillen, de Nα pourαvariant deaàz, de N et de Nε. Ces données seront rangées respectivement dans une variable globalen_etats, un tableau d’entiersalpha, ainsi que dans deux variables globalesetoileetepsilondont les déclarations suivent :

let alpha = make_vect 26 (−1) and etoile = ref (−1)

and epsilon = ref (−1) and n_etats = ref (−1) ;;

Question 4. Dans cette question on suppose que les variablesn_etats,alpha, etc. représentent un automateAàn états. Soit un entieretatsqui représente un ensemble d’états A deA, tel que A est clos par transitions instantanées. Soit également une lettreαreprésentée en machine par le caractèrec.

a) Écrire les fonctionsmangede type int −> char −> int etfermede typeint −> int telles que les appelsmange etats c etferme etatsrenvoient un entier qui encode respectivement les ensemblesα(A) etε(A).

b) Écrire la fonctionetapede type int −> char −> int telle que l’appeletape etats crenvoie un entier qui encode l’ensemble d’états A0tel que A→α A0.

c) Exprimer la complexité d’une exécution de etape, d’abord dans le cas où le motif pne contient pas de motif optionnel, puis dans le cas général. Dans ce cas général, on pourra borner le coût d’exécution deetapeen utilisant toute caractéristique jugée pertinente du motifp.

d) Ecrire la fonctionetat_finalde type int −> booltelle que l’appeletat_final etatsteste la présence de l’état final en1dans l’ensemble d’états A.

Question 5. Le but de cette question est la construction de l’automateA(p).

a) Ecrire la fonctionconstruire_autode type string −> unitqui prend en argument une chaîne de caractèresprepré- sentant un motifpet initialise les variablesn_etats,alpha,etoileetepsilonafin qu’elles encodent l’automate A(p). Dans le cas où la chaînepn’est pas un motif, la construction de l’automate devra échouer. Pour ce faire, on dispose de la primitiveechouequi prend un message d’erreur en argument.

b) Évaluer la complexité de l’appelconstruire_auto pen fonction de la longueur de la chaînep.

Question 6. On programme la reconnaissance du filtrage d’un mot par un motif.

a) Écrire la fonctionfiltrede type string −> string −> booltel que l’appelfiltre p mteste le filtrage du motmpar le motifp.

b) Donner la complexité de l’appelfiltre p men fonction de la longueur de la chaînemet de toute caractéristique pertinente dep, d’abord dans le cas oùpne contient pas de motif optionnel, puis dans le cas général.

Question 7. Dans cette question on étudie la reconnaissance des sous-mots d’un mot.

a) Soitpun motif etmun mot. Trouver un motifqtel queqfiltremsi et seulement sipfiltre un sous-mot dem. En déduire une fonctionfiltre_sous_motde type string −> string −> booltelle que l’appelfiltre_sous_mot p mteste le filtrage d’au moins un sous-mot demparp.

b) On considère un motifpet un motm0α1· · ·αk1. Soit de nouveau la suite d’ensembles d’états A0,A1, . . . ,Ak engendrée par la lecture demparA(p) :

A0=ε({e0}), Ai+1=ε(αi(Ai)) pour 06i < k.

Justifier brièvement que l’état final deA(p) appartient à Ai si et seulement sipfiltre un préfixemi0α1· · ·αi1de m.

Trouver (en justifiant son choix) une suite B0,B1, . . . ,Bktelle que l’état final deA(p) appartient à Bisi et seulement si pfiltre un sous-motαjαj+1· · ·αi1dem.

page 3

(4)

c) De la suite Bidéduire une fonctioncompte_sous_motsde type string > string −> int tel que l’appel

compte_sous_mots s mcompte le nombre de sous-mots demqui sont égaux à un mots. La complexité de l’appel compte_sous_mots s mdevra être du même ordre de grandeur que celle defiltre s m.

d) Montrer par un contre-exemple que la suite Bi ne permet pas, à elle seule, de déterminer le nombre de sous-mots d’un motmque filtre un motifpquelconque.

Question 8. Soient deux motsmetµ; on dit quemdiffère deµd’au plus une erreur dans les trois cas suivants : oubli : il existe une décompositionµ=m0αm00avecm=m0m00;

insertion : il existe une décompositionµ=m0m00avecm=m0αm00; substitution : il existe une décompositionµ=m0αm00avecm=m0βm00. (αetβci-dessus sont des lettres quelconques.)

a) On se place d’abord dans le cas d’au plus un oubli. Montrer comment reconnaître si un motmdiffère deµd’au plus un oubli, à l’aide de l’automateA(µ) et de deux suites d’ensembles d’états Ai et A1i. On justifiera le choix de ces suites.

b) Généraliser au cas d’une erreur quelconque.

c) Soient deux chaînesmuetmqui représentent respectivement les motsµetm. Écrire une fonctionfiltre_erreurde type string > string −> booltel que l’appelfiltre_erreur mu mrépond vrai lorsquemdiffère deµd’au plus une erreur, et faux sinon.

d) Écrire une fonction sous_mot_erreurde type string −> string −> bool telle que l’appelsous_mot_erreur mu m répond vrai lorsqu’un sous-mot demdiffère deµd’au plus une erreur, et faux sinon. La complexité de l’appel sous_mot_erreur mu mdevra être du même ordre de grandeur que celle de l’appelfiltre_erreur mu m.

page 4

Références

Documents relatifs

[r]

BCPST Mod´ elisation de variables al´ eatoires discr` etes avec Python, Page 3 sur 3 2013-2014 joueur p et qui renvoie le vainqueur 0 pour le casino et 1 pour le joueur et un nombre

Le vendeur de cette balance ´ electronique a assur´ e au boulanger qu’il y avait une. chance sur deux pour que la balance ne se d´ er` egle pas avant

Dans un premier temps, on r´ epondra aux questions ` a l’´ ecrit puis pour v´ erifier que nos algorithmes sont bien ´ ecrits, on les programmera sur machine.. Exercice

[r]

- Ecrire une fonction récursive qui calcule le PGCD de deux entiers positifs. On suppose qu’on ne peut effectuer que

// on suppose que le tableau Note contient

Entourer dans les deux algorithmes (1. et 2.) la/les instructions qui ont été modifiées2. Quelle est la valeur contenue dans la variable P en fin d’exécution