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

 C Discussion :

Questions d’un novice sur les «horribles» automates finis déterministes


Sujet :

C

  1. #1
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut Questions d’un novice sur les «horribles» automates finis déterministes
    Bonsoir,


    Ça fait longtemps que je ne m’étais pas montré sur le forum mais vu mon emploi du temps je pense que mon absence est tout à fait compréhensible.

    Je souhaite toujours m’exercer et m’améliorer dans la programmation et je compte m’attaquer aux automates finis déterministes. En effet il s’agit selon moi d’un thème intéressant et sans doute utile (et qui pourrait me faire aboutir sur des thèmes plus complexes comme les automates non-déterministes, les automates non-finis et consorts).
    J’ai en premier lieu organisé mon étude en plusieurs points que voici :
    1. coder un automate fini déterministe «fixe»:
      1. créer des nœuds (initiaux, intermédiaires et finaux),
      2. créer des chemins étiquetés (chemins d’un nœud à un autre et chemins … récursifs?),
      3. assembler le tout pour avoir un automate et
      4. complexifier la chose (flux de données en plus des étiquettes, travail de ces dernières dans chacun des nœuds);
    2. coder un automate fini déterministe «dynamique»;
    3. si nécessaire.

    Toutefois je bute sur un obstacle de taille: je n’ai pas la moindre idée sur la manière de commencer pour créer ne serait-ce qu’un nœud ou un chemin étiqueté…


    Merci d’avance pour votre aide.


    PS: Pour cela j’ai lu l’article de Wikipédia sur la théorie des automates finis. Si d’autres lectures me sont selon vous nécessaires, n’hésitez à m’en faire part.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Si tu considère ton automate comme un graphe, tu peux faire la liste des successeurs, ou le tableau d'adjacence, etc...

    En prenant pour chaque sommet un pointeur vers une fonction.

    EDIT : bien sûr, il faut dans tes matrices, ajouter une dimension pour le choix effectué (chemin a, b ou c pour un alphabet à 3 lettres)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    tu veux faire quelque chose comme ça ?

    GRAPHE
    - tableau de sommets
    - tableau d'arcs
    - *initial

    SOMMET
    - nom
    - estFinal (boolean)

    ARC
    - *somSrc
    - *somDst
    - etiquette

    (en fait je ne vois pas trop ton problème)

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    salut !
    comme la question m’intéresse, j'ai fait une recherche google avec automate et Aho. il y a beaucoup de références universitaires sur le sujet et parfois même des algorithmes originaux ...
    merci d'avoir ouvert ce sujet.

    A+

  5. #5
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    J'ai réfléchi à la question entre les cours, les projets, les rapports à remettre et les examens. Je suis encore au stade de l'algorithme mais voici ce que j'ai conclu de mes contorsions intellectuelles.

    Admettons que mon automate ait n sommets, numérotés de 0 à (n-1) et que mon alphabet contienne p lettres, que je numérote de 0 à (p-1).
    Dans un premier lieu je vais créer un vecteur qui listera toutes les lettres de mon alphabet. L'élément 0 de ce vecteur correspondra à la lettre n°0, l'élément 1 correspondra à lettre n°1, et ainsi de suite jusqu'à l'élément (p-1) qui correspondra à la lettre n°(p-1); le vecteur comprendra un élément supplémentaire, l'élément p, qui sera égal à une valeur ou un caractère qui ne sera pas présent dans mon alphabet (par exemple -1). Je le nommerai arcAlphabet.
    Ensuite je vais créer un vecteur de pointeurs qui listera tous mes sommets comme précédemment: l'élément 0 de ce vecteur correspondra au sommet 0, et ainsi de suite jusqu'à l'élément (n-1) qui correspondra au sommet (n-1); et en sus le vecteur aura un élément supplémentaire, l'élément n, qui pointera vers NULL. Je le nommerai arpRegSommets[].
    Chaque élément de ce dernier pointera un vecteur de (p-1) valeurs entières. Chacune des valeurs entières au numéro du sommet accessible via le chemin étiqueté par la lettre correspondante au numéro de l'élément. Je les définirai via la matrice arnSommets[][].
    Enfin je créerai une structure arpRegAutomate qui pointera vers tous ces registres. La structure pourrait être définie comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struc{
         char *Alphabet;
         int *RegSommets;
         int *Sommets;
    } _tAutomate;
    C'est un premier jet donc il est à même d'être modifié s'il s'avère que le code est améliorable.

Discussions similaires

  1. Questions d'un novice sur les « infâmes » pointeurs
    Par VivienD dans le forum Débuter
    Réponses: 81
    Dernier message: 25/08/2011, 19h09
  2. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20
  3. [c#] une question de noob... sur les textbox
    Par warenbe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/08/2005, 23h13
  4. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  5. [LG]J'ai honte : question de cours sur les paramètres
    Par letibdesneiges dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2004, 13h57

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