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

Caml Discussion :

Plus longue branche


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Plus longue branche
    Bonjour,
    J'ai un arbre n-aire dont j'ai défini le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type arbre =
    	  fin
    	  |Pere of valeur*arbre list 
    	  |Feuille of valeur;;
    Et j'ai besoin de trouver la plus longue branche ;
    l'arbre me sert a représenter des combinaison de longueur diverse d’où l'utilisation d'un constructeur fin qui m'indique qu'une des combinaison s’arrête la;
    Mon problème est que je n'ai pas le droit d'utiliser les références .
    avec les références j'aurais indiqué pour chaque feuille a quelle étage elle se trouve , puis prenant la feuille la plus basse , je serais remonté,
    Sauf que mon type d'arbre ne me le permet pas.
    J'ai une fonction qui me permet d'afficher toutes les combinaisons de mon arbre sous forme de liste. Mais l'utilisation de l'arbre me permet de gagner du temps de calcul , et trouver la plus longue combinaison a partir des listes des combinaisons retire tout l’intérêt a l'usage d'un arbre.
    Quelqu'un aurait une piste pour moi (même formulé en français, j'essaierai de trouver la fonction associée

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Désolé mais je te réponds à toute vitesse avant d'aller en cours, j'espère ne pas être passé à coté de ta questions. Fais-moi signe si c'est le cas !

    Sans trop réfléchir : ce que tu peux faire facilement c'est parcourir ton arbre en stockant au fur et à mesure la plus grande profondeur trouvée (pour ça il faut que tu aies deux arguments dans ta fonction : un qui correspond à la plus grande profondeur trouvée à ce stade et un correspondant à la profondeur actuelle; une fois le parcours terminé tu renvoies la plus grande valeur trouvée)

    Ceci dit si tu dois parcourir ton arbre à chaque fois que tu veux sa hauteur, ce n'est pas optimal. Du coup le plus simple serait peut-être de stocker la hauteur et de la mettre à jour au fur et à mesure de la construction de l'arbre.

    J'espère pas avoir dit de conneries. J'ai cours à 13h30 donc je peux pas t'aider beaucoup plus pour l'instant, mais si tu m'en dis plus sur ce que tu veux faire je veux bien essayer de t'aider (essayer hein )

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je ne souhaite pas la hauteur de la plus longue branche , mais toute la branche entière .
    Donc il me faut garder tout le chemin permettant d'acceder a cette branche la plus profonde.

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Le chemin est simplement une liste d'entiers où [] désigne le nœud racine et où, dans h::t :
    • h désigne un indice dans la liste des arbres enfants
    • t désigne le chemin déjà parcouru depuis la racine

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Eureka ce matin en me levant j'ai trouvé la solution qui me convenait.
    Mon souci principal ,etait que lorsque je me trouvais face a un noeud (comme dans un labyrinthe) je ne savais pas vers quelle branche me tourner car rien de ne presagais de sa longueur.
    Il m'as suffit d'utiliser une fonction qui me donne la longueur d'une branche.
    A partir de ca j'ai créé une fonction qui compare deux branches et me retourne la plus longue.
    On fait un fold left pour comparer les branches deux a deux et ne garder que la plus longue. on note le contenu de la valeur du noeud et on reapplique la meme fonction a ses enfants .
    A tous les etudiants de l'n7 bon courage , le rendu est vendredi. Je poste ma solution ici au cas ou certains soient encore bloqué la.

Discussions similaires

  1. Comment trouver la chaine la plus longue?
    Par Mydriaze dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 02/08/2007, 12h19
  2. [recursif] Plus longue sequence de 1 avec pivot 0
    Par sorry60 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/11/2006, 11h58
  3. Réponses: 18
    Dernier message: 19/06/2006, 14h48
  4. Migration (requête de plus en plus longue)
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2006, 14h04

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