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 orienté : chemin de longueur k ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 53
    Points
    53
    Par défaut Graphe orienté : chemin de longueur k ?
    Salut,

    Voilà je travaille sur les graphes orientés, plus précisemment sur des graphes ayant des arcs valués par des symboles. Mon graphe représente donc un automate. Chaque arc qui relie 2 sommets, a pour longueur 1.

    Je cherche donc un algo qui permet de trouver s'il existe un chemin de longueur k entre l'état initial ( le sommet source du graphe ) et un état final de l'automate ( un sommet quelconque ). Autrement dit si l'automate permet de générer des mots de longueur k.
    Le graphe représentant l'automate peut comporter un ou plusieurs cycles, ou pas du tout.

    Connaissez vous un algo qui permet de résoudre ce problème ? Ou avez vous une idée ?

    Merci d'avance et @ bientot !

  2. #2
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 53
    Points
    53
    Par défaut
    Ca m'a pas aidé :/

    Ce que je veux, c'est un algo qui repose sur la recherche en profondeur à partir du sommet initial.

    Si certain connaisse déjà le problème, un peu d'aide me ferai pas de mal siouplé

  4. #4
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    C'est l'algo de Ford-Bellman mais tu ne t'intéresse qu'à l'accessibilité d'un sommet sans t'accuper de la longueur des chemins.

    A partir du sommet initial, on a trivialement tous les sommets qui peuvent être atteints en 1 arc (et le plus court chemin associé).

    De manière récursive, quand on a les sommets accessibles par un chemin de k arcs depuis le sommet initial, on obtient facilement les sommets accessibles par un chemin de k+1 arcs (c'est l'ensemble des voisins)

    C'est l'algo signalé par Nemerle, j'espère que le nom de l'algo (avec google) et ces quelques explications t'inspireront plus...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Points : 155
    Points
    155
    Par défaut
    Il y aurait une réponse naïve :

    Tu fais un algo de plus court chemin en enlevant les cycles.
    Si tu trouves un chemin de longueur inférieur à ton k
    tu peux le faire augmenter grace aux cycles ...

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Encore plus naïf,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Soit A l'ensemble des états accessible
     
    Initialiser A avec l'état de départ.
     
    De 1 jusqu'à k
      Pour chaque sommet s dans A
          Ajouter dans A les sommets adjacents à s (en enlevant les doublons)
     
    Pour chaque noeud s dans A
       Si s n'est pas un état final, le retirer de A
    Jc

  7. #7
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    C'est en pseudo-code ce que je disais plus haut sauf que là tu regardes s'il y a un chemin de longueur inférieure ou égale à k. Pour avoir une longueur eactement égale à k, il faut modifier le code ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Soit A l'ensemble des états accessible
     
    Initialiser A_1 avec l'état de départ.
     
    Pour i de 2 jusqu'à k
      Pour chaque sommet s dans A_{i-1}
          Ajouter dans A_i les sommets adjacents à s (en enlevant les doublons)
     
    S'il y a un état final dans A_k, c'est gagné!

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    C'est en pseudo-code ce que je disais plus haut sauf que là tu regardes s'il y a un chemin de longueur inférieure ou égale à k
    Tu as entièrement raison, va savoir pourquoi je l'ai loupé... Ca m'apprendra de lire en diagonale!


  9. #9
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    Je pense qu’il ne faudrait pas se contenter des chemins les plus courts entre le nœud de départ S et les nœud terminaux F(i) mais plutôt essayer d'avoir la liste de tous les chemins sans cycle, allants de S vers tous les F(i), et marquer chaque chemin s’il comporte un cycle. En suite tu peux raffiner l’algorithme en réduisant cette liste par des règles.

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/12/2014, 00h27
  2. programmation java graphe orienté
    Par rosered dans le forum Général Java
    Réponses: 1
    Dernier message: 17/04/2008, 15h14
  3. graphe orienté : parcours de tous les noeuds
    Par Lily_ dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/10/2007, 11h48
  4. Application graphes orientés
    Par cashp dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 03/04/2007, 17h43
  5. [Images] graphes orientés
    Par Atchoum_002 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 25/10/2005, 16h47

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