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 :

[Graphe][Parcours] Chaines de caractères


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut [Graphe][Parcours] Chaines de caractères
    Bonjour a tous !

    Je suis confronté a un problème que je n'arrive pas vraiment a résoudre, je vous explique : j'ai un graphe, ce graphe possède des arcs nommés (avec des lettres 'a' 'b' etc). Ensuite j'ai une chaine de caractère qui représente un parcours dans ce graphe, par exemple la chaine peut être :

    [a;a;(b|a)] : cette chaine représente un chemin " a puis a puis a OU b "
    En gros le point virgule représente la séquence de 2 parcours, et le | un choix possible entre 2 trajets.

    Ici on voit bien qu'on peut avoir 2 chemins : le 1er : a a b et le 2nd : a a a.

    Le problème ce que je n'arrive pas a trouver un algo qui lit caractère par caractère et qui sait quoi faire en fonction du caractère rencontré.

    De plus les chaines peuvent être beaucoup plus compliquées, du style

    [a;(b|(c;d)|d);b|a]

    Voila j'espère avoir été assez clair et merci pour l'attention que vous pourrez porter a ce message
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu ne veux pas tenter le coup de l'algo déterministe ?

  3. #3
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Algo déterministe? C'est a dire ? . . .
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Ces expressions sont des expressions régulières, pour bien faire il faut les compiler sous forme d'automates à états finis avant de les exécuter machinalement.

    --
    Jedaï

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Le problème est-il de dévelloper l'expression afin de lister tous les chemins possibles ou y a-t-il un autre objectif ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par GyZmoO
    Algo déterministe? C'est a dire ? . . .
    Un automate déterministe pour être plus exact D'abord on crée l'automate non déterministe, puis on le déterminise.

  7. #7
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Le problème est-il de dévelloper l'expression afin de lister tous les chemins possibles ou y a-t-il un autre objectif ?
    C'est juste lister tous les chemins possibles, il n'y pas d'autre objectif a part ma satisfaction personnelle

    Un automate déterministe c'est un automate qui pour une "lettre" donnée ne peut effectuer qu'un seul trajet c'est bien ça? Enfin je veux dire pour une même lettre il n'y pas plusieurs trajets possibles ?

    Si c'est ça je comprend mais quand je me retrouve avec ma chaine de caractère, (par exemple : [a;(b|c;(a|b));b] ) je fais quoi ? J'avoue être un peu dans le flou la


    Merci pour vos réponses !
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Question :

    Dans ton exemple, à quoi servent ces parenthèses :

    ton expression ne serait-elle pas simplifiée en :

    ?

    Il faut que tu te penches à mon avis sur les arbres syntaxiques; un arbre te donnera donc toutes les possibilités, je ne suis pas assez fort pour donner d'exemple désolé
    K

  9. #9
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par GyZmoO
    Le problème ce que je n'arrive pas a trouver un algo qui lit caractère par caractère et qui sait quoi faire en fonction du caractère rencontré.
    C'est la définition du déterminisme . Pour l'instant ton automate est non-déterministe puisque que ton algo ne peut pas toujours décider quels chemins enprunter (c-a-d le chemin ne peut pas être déterminé). Rendre ton automate déterministe permet de résoudre ce problème.

    La transformation de ton automate non-déterministe --> déterministe se fait à l'aide d'un algorithme judicieux que l'on trouve dans tous les bons livres traitant du sujet.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  10. #10
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    C'est vrai que ces parenthèses ne servent pas a grand chose Mais le truc c'est que, des fois elles ne servent pas, des fois elles servent et voila
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  11. #11
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Petite question sur ton problème... peux tu enumérer l'ensemble des caractères trouvables sur ta chaine ? n'y a t il que ; et | ou retrouve-t-on des caractères de répétition (*),(+),(?) qui viendrait compliquer le tout si tu veux enumerer l'ensemble des possibilité. En gros, ta chaine peut elle proposer des sequences bouclées comme par exemple [a;(b;a)*;b] qui donnerait toutes les sequences a(ba)*b et dont le nombre de mot du langage deviendrai infini.

    Si ce sont les seuls caractères, je pense qu'il serait adapté de transformer ton expression en arbre que tu parcourerais pour obtenir toutes les combinaisons...

    L'automate serait plus utile je pense dans le cas de validation de mot du langage non ?
    See you, space cowboy... and if you're satisfied, click on

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Pour résoudre le problème une solution consiste à développer 3 fonctions :

    1) Une addition de liste de chemins qui correspond à l'opérateur "|",
    2) Une multiplication de liste de chemins qui correspond à l'opérateur ";",

    Exemple : si Liste1={Cx,Cy} et Liste2={Cw,Cz}, alors
    ADD(Liste1,Liste2)={Cx,Cy,Cw,Cz}
    MULT(List1,LIST2)={Cx!!Cw,Cx!!Cz,Cy!!Cw,Cy!!Cz}
    dans lequel "!!" représente la concaténation de 2 chemins

    3) une procédure récursive ChercheChemins(Expression: argument d'entrée, Liste de chemins : argument de retour) :

    procedure ChercheChemins(Expression,Liste)
    begin
    - tant qu'il y a des parenthéses encadrant l'expression, on les supprime.
    - si l'expression est réduite à une lettre (exemple : "a"),
    la liste contiendra 1 seul chemin de longueur 1 - on sort de la fonction -.
    - on cherche le premier séparateur au niveau de parenthésage zéro
    le niveau 0 au départ s'incrémente de 1 lorsqu'on rencontre une "("
    et se décrémente si ")".
    - on découpe alors l'expression en 2 Expressions exp1 et exp2.
    - on exécute : ChercheChemins(Exp1,Liste1) et ChercheChemins(Exp2,Liste2).
    - suivant l'opérateur entre exp1 et exp2,
    on exécute Liste=ADD(Liste1,Liste2) ou Liste=MULT(Liste1,Liste2).
    end ;

    PS : La solution proposée considère que les 2 séparateurs sont d'égale priorité,
    Si ce n'est pas le cas, il faudra rechercher le séparateur prioritaire d'abord.
    Si pas de sep prioritaire trouvé, on recherchera alors le séparateur secondaire.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  13. #13
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Petite question sur ton problème... peux tu enumérer l'ensemble des caractères trouvables sur ta chaine ? n'y a t il que ; et | ou retrouve-t-on des caractères de répétition (*),(+),(?) qui viendrait compliquer le tout si tu veux enumerer l'ensemble des possibilité. En gros, ta chaine peut elle proposer des sequences bouclées comme par exemple [a;(b;a)*;b] qui donnerait toutes les sequences a(ba)*b et dont le nombre de mot du langage deviendrai infini.
    Je peux avoir une fermeture * mais pour un parcours entier, c'est a dire je peux pas avoir [a;(b|a)*;g;d] je peux juste avoir [(a;b;b;b)*] .

    Graffito, ta solution a l'air cool je vais tenter ça , merci a tous pour vos réponses claires et efficaces

    Je vous tiendrai au courant .
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par GyZmoO
    Un automate déterministe c'est un automate qui pour une "lettre" donnée ne peut effectuer qu'un seul trajet c'est bien ça? Enfin je veux dire pour une même lettre il n'y pas plusieurs trajets possibles ?
    C'est un algo dans lequel il n'y a qu'un seul état actif à la fois.

  15. #15
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Juste pour information, tes chaines de caractères sont ce que l'on appelle des expression regulière. Elles permettre de definir ce que l'on appele un langage rationnel.

    Ce que tu appeles graphe est aussi appele automate de mot.

    Si tu es interessé par le sujet, il y a chose qui ont été faite sur le sujet. Tu peux commencer par un cours d'info théorique de licence par exemple celui ci qui n'est, je le reconnais, pas forcement tres accessible mais il existe d'autre ploy tres bien fait.

    Les chapitres 3 et 6 pourront t'interessé particulièrement. Tu trouveras notamment le théorème de Kleene qui montre la correspondance entre Langage reconnaissable ( par un automate deterministe ) et langage rationnel. Bref, c'est plus ou moins ce que tu cherchais.

    Ensuite, il est tres simple de simple d'implémenter un automate deterministe comme ceux que tu utilises.

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les cours de l'X sont quand même plutôt de niveau Bac+4 ou Bac+5
    Mais faire un truc comme ça, c'est du niveau Bac+3 sans aucun pb, il suffit de connaître les automates déterministes - cours d'info de spé par exemple -. Pour en revenir à l'X, il y a un sujet d'info du concours d'entrée du début du millénaire qui consiste à créer un tel automate.

  17. #17
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Juste pour info, j'ai suivi le meme cours que celui que j'ai cité en licence ( avec le meme prof ) à la fac...

    Par contre, j'avais suivi des cours sur les automates et les langages rationnels en deuxième année de DEUG. Si je retrouve les cours, je peux vous passer les liens, c'est peut etre un peu plus accessible que les cours que j'ai filé.

  18. #18
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Bon, j'ai trouve un cours plus accessible ( niveau bac +2 ) que j'avais suivi à une epoque :
    va faire un tour sur cette page : http://www.lri.fr/ENSEIGNANTS/DEUG/S3-pil/

  19. #19
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Merci énormément pour tous ces conseils\cours en tout genre

    En fait je connais un peu tout ça, exp régulière automate fini déterministe et tout ça (je suis en L3 ^^) mais bon avec toutes les grêves\blocus des facs qu iL y a eu cette année on a survolé vite fait tout ça et donc je pompe pas grand chose

    Je vais regarder tout ça en tout cas, merci
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 1
    Dernier message: 10/11/2013, 00h35
  3. [RegEx] Parcours de chaine de caractères
    Par soulflow dans le forum Langage
    Réponses: 14
    Dernier message: 11/06/2009, 16h15
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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