IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Automates et langages (AFN <-> expression régulière)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut Automates et langages (AFN <-> expression régulière)
    Bonjour,

    Je passe l'examen d'un module (Automates et langages) la semaine prochaine (dans 10 jours).

    Je suis arrivé à la fin de mon cours, ou il y a les differents algorithmes, non ecrits dans le cours, mais le principe est expliqué. Alors, la partie concerne la construction d'un AFN à partir d'une expression régulière et inversement. En fait, c'est l'inverse qui m'interesse.

    j'ai l'exercice suivant :
    soit un automate de la forme T = {A, Q, I, F, µ}
    où A est l'alphabet reconnu par l'automate, Q est l'ensemble des états, I l'ensemble des états initiaux et F l'ensemble des états finaux avec µ les actions de l'automate (configurations, etapes.. ?)

    soit un automate T1 = {{a,b}, {1,2,3,4,5,6}, {1,3}, {3,6}, µ}
    µ est la suite des actions de l'automate, on peut les voir sur l'image ci-dessous. je peut les ecrire si vous voulez.

    automate construit avec JFLAP.
    je dois donner l'expression rationnelle r1 qui dénote le langage reconnu par T1 en passant par la résolution d'un systeme d'equations rationnelles.
    Puis, donner un petit algo pour le passage de l'AFN à l'expression rationnelle. Mais le probleme, avant de faire l'algo, il faut savoir passer de l'AFN à l'er, or, je sais pas faire. Si quelqu'un peut m'aider s'il vous plait.
    MErci beaucoup, vous me rendriez un big service.

    P.S. : si je dois vous preciser quelque chose, demandez le moi (une partie du cours par exemple)
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  2. #2
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    je propose ca comme systeme d'equations rationnelles, mais je sais pas si c'est juste...


    L1 = aL2
    L2 = aL2 + bL6 + 1
    L3 = bL4 + 1
    L4 = aL4 + bL5
    L5 = aL5 + bL6 + 1
    L6 = aL6 + 1

    merci bcp
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Je n'ai pas tout lu, et je suis pas trés doué niveau vocabulaire ... mais tes équations sont bonne a vue de nez
    Pour résoudre ca, il faut appliquer le lemme d'arden ( ou un om de ce genre lol ) sur l'equation 6 puis ca va remonter tout seul

  4. #4
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    j'ai trouvé :

    L1 = aL2
    L2 = aL2 + bL6
    L3 = bL4 + 1
    L4 = aL4 + bL5
    L5 = aL5 + bL6
    L6 = aL6 + 1

    mais il faut résoudre ca et trouver une expression rationnelle.
    J'essaie :

    L6 = a*
    L5 = a* + b(a*) = a* + ba* = a*ba*
    L4 = a* + b(a*ba*) = ?
    ... et apres je me perds


    merci...
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    HUm j'avais lu un peu trop vite, d'ou sorte tes " 1 " ? c'est des Epsiolne? si oui je vois aps de sortie sur ton dessin de l'automate ... !?!

  6. #6
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    je mets +1 quand c'est un etat final.

    C'est epsilon effectivement.
    pendant l'ecriture de l'er, il s'annule.

    le double cercle signifie que c'est un etat final.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Attention, a* + ba* ça ne fait pas a*ba* ! (si le + est bien une réunion comme c'est la convention). Par contre on a bien : L5 = aL5 + ba* = a*ba*
    L4 = aL4 + ba*ba* = a*ba*ba*
    L3 = ba*ba*ba* + 1
    L2 = aL2 + bL6 = aL2 + ba* = a*ba*
    L1 = aa*ba*

    Finalement, on a :
    L = L1 + L3 = aa*ba* + ba*ba*ba* + 1

    Ce qui correspond bien à ton automate.

    Maintenant les algos pour transformer un automate en regex sont multiples. L'un des plus simple à expliquer est l'algorithme par suppression d'état, mais je ne suis pas sûr qu'il soit évident à coder...

    --
    Jedaï

  8. #8
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Citation Envoyé par Jedai
    Attention, a* + ba* ça ne fait pas a*ba* ! (si le + est bien une réunion comme c'est la convention).
    Oui, c'est effectivement la convention mais pourquoi alors :

    Citation Envoyé par Jedai
    Par contre on a bien : L5 = aL5 + ba* = a*ba*
    le plus est un "ou" ? donc on devrait mettre le signe |
    comme cela : a* | ba*

    enfin, je suis pas sur...
    merci bco

    P.S. : juste une "correction" pour L, voir en bas.

    L6 = a*
    L5 = a* + ba* + 1 = a*ba*
    L4 = a* + b(a*ba*) = a*ba*ba*
    L3 = ba*ba*ba* + 1 = ba*ba*ba*
    L2 = a* + ba* = a*ba*
    L1 = aa*ba* = a*ba*

    L = L1 + L3 = a*ba* | ba*ba*ba*
    puisqu'il y a deux etats initiaux, on met le signe | qui signifie "ou", Non ?

    Cordialement
    encore merci
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  9. #9
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ton L est faux.... En effet tu oublies le mot vide (que tu avais noté 1, notation que j'avais reprise, le mot vide fait partie de L puisqu'un état (3) est à la fois initial et final) et "b" ne fait pas partie de L (alors qu'il fait partie de a*ba*, mais pas du aa*ba* de ma réponse).

    De plus tu semble confondre "L5 = aL5 | ba*" et "L5 = a* | ba*" qui sont très différent puisque la solution du premier est d'après le lemme d'Arden "a*ba*" tandis que le deuxième a pour solution "a* | ba*"...
    Le + est un "ou", le | aussi, c'est juste une question de convention et du fait que le + fait plus "équation" que le |.

    (NB : j'ai l'impression que tu ne comprends pas le lemme d'Arden, tu devrais le revoir)
    (aa*ba* est différent de a*ba* !!!)
    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Théorie des Langages et Compilation: Expressions Régulières.
    Par ByteCode07 dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 29/01/2013, 16h52
  2. Expressions régulières en langage C
    Par wilfried789 dans le forum C
    Réponses: 2
    Dernier message: 26/07/2012, 15h24
  3. Algo/pascal : Génération d'un langage correspondant à une expression régulière
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/02/2007, 12h17
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo