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

Haskell Discussion :

[Haskell] graphes & cycles hamiltonien


Sujet :

Haskell

  1. #1
    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
    Par défaut [Haskell] graphes & cycles hamiltonien
    Bon, je me lance pour la culture dans Haskell, et j'aimerais tout d'abord modéliser un graphe non orienté et non connexe. Et bien sûr, je bute: j'ai pensé à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data Arbre a = Noeud a [Arbre a]
    Mais cela ne gère que des arbres connexes. Quelqu'un m'aide?

    Ensuite, j'essaierai de mettre en place la détermination de cycles hamiltoniens...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  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
    Par défaut
    Je tente le mécanisme standard, mais il n'y a rien de mieux?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type Id = Int
    type Fleche = (Id,Id)
    type Graphe = [(Fleche)]
    (NB: c'est con d'appeler le chemin qui relie 2 sommets "fleche", mais bon...)
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Points : 372
    Points
    372
    Par défaut
    Mathématiquement, un graphe est fait des choses suivantes:

    - un ensemble, dont les éléments sont appelés sommets,
    - un ensemble dont les éléments sont appelés arêtes (ou flèches),
    - deux applications du premier ensemble vers le deuxième, qui s'appelle respectivement 'source' et 'but'.

    Par conséquent, tu crées deux tables dans une base de données, une pour les sommets et une pour les arêtes, et dans la table des arêtes, tu prévois une colonne 'source' et une colonne 'but'.

    Après cela, rechercher les cycles en SQL, ça va peut-être être du sport.... mais il faut voir.

  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
    Pourquoi pas simplement une liste d'Arbre pour représenter un graphe non-connexe ? Par contre avoir un identifiant (par exemple un entier) associé aux noeuds peut-être intéressant pour les distinguer les uns des autres.

    As-tu regardé la bibliothèque Data.Graph ? Tu peux lire le source pour voir comment ça a été fait.

    --
    Jedaï

  5. #5
    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
    Par défaut
    Merci pour la bibliothèque Jedai. Effectivement je peux opter pour une liste de Noeud a [Arbre a], je ne sais pas encore.

    L'objectif "ludique" (que je comparerai avec une version .net ), pour appréhender mieux Haskell, c'est le topic

    http://www.developpez.net/forums/sho...d.php?t=405083

    J'aurais donc

    1. A produire la liste des graphes connexes à partir de ma matrice d'équivalence,

    2. A générer les cycles hamiltoniens

    3. A générer "aléatoirement" d'autres cycles.

    Je me demandais juste si quelqu'un avait déjà produit quelque-chose sous Haskell concernant les cycles Hamiltoniens. Encore une fois, mon objectif est de voir la puissance d'Haskell...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/10/2010, 14h06
  2. Theorie des graphes : trouver tous les cycles
    Par genetin dans le forum Mathématiques
    Réponses: 3
    Dernier message: 02/07/2010, 10h55
  3. tous les cycles d'un graphe
    Par nina2007 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  4. cycle dans un graphe --Boost graph
    Par nina2007 dans le forum Boost
    Réponses: 0
    Dernier message: 11/11/2009, 10h41
  5. plus petit cycle dans un graphe
    Par nina2007 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 07/08/2009, 14h41

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