OVH Cloud OVH Cloud

Pb sur les arbres (Tree)

6 réponses
Avatar
p_geni...
Bonjour,

j'ai un petit problème pour organiser des informations:

j'ai un tableau (%hash) avec les informations suivantes


# id | id_parent
# ---+-----------

%id2parent = (

1 => 'NULL',
2 => '1',
3 => '2',
4 => '3 2 1',
5 => '1',
6 => '5 1',
7 => '5',
8 => '2 1',
9 => '1',
10 => '1 9',
13 => '8',
14 => '10'
);

Chaque numéro possède une relation (relative ou absolue)
avec ses parents. Le pb vient du fait que la référence
est formée parfois : - que du père
et d'autres fois : - du père et des grand parents

Je souhaite afficher les données ainsi

1
|_ 2
| |_ 3
| | |_ 4
| |_8
| |_ 13
|_ 5
| |_ 6
| |_ 7
|
|__9
|_ 10
|_ 14

(j'espère que cela ne sera pas trop déformé)


Existe-t-il un module cpan pour gérer ces relations?
j'ai cherché des modules du genre "tree*" mais je n'ai pas trouvé
un module approprié

Je souhaite créer une fonction itérative qui s'occupe de cela
mais je bloque un peu faut-il cherhcer la profondeur de chaque
nombre (est ce égal au nombre de parents), comment faire les indentations?
etc..

De plus le hash %id2parent peut évoluer et comporter
d'autres nombres etc...


Merci de votre aide.
A+, Pierre.

-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

6 réponses

Avatar
Eriam Schaffter
Bonjour,

j'ai un petit problème pour organiser des informations:

j'ai un tableau (%hash) avec les informations suivantes



justement je pense qu'un hash et un tableau sont deux choses différentes

Existe-t-il un module cpan pour gérer ces relations?
j'ai cherché des modules du genre "tree*" mais je n'ai pas trouvé
un module approprié



je suggère de faire des hachages imbriqués

vous pouvez chercher Hashes of Hashes sur votre moteur de recherche favori

Avatar
Emmanuel Florac
Le Sun, 19 Jun 2005 12:41:14 +0000, p_geni a écrit :


Chaque numéro possède une relation (relative ou absolue) avec ses
parents. Le pb vient du fait que la référence est formée parfois : -
que du père
et d'autres fois : - du père et des grand parents


Je ne vois pas à quoi sert d'avoir pour un enfant plus que le noeud
père. a priori cette seule information suffit puisqu e du père au peut
remonter, etc.

--
Le commissaire : Comment vous appelez-vous?
Garance : Moi je ne m'appelle jamais, je suis toujours là. J'ai pas
besoin de m'appeler. Mais les autres m'appellent Garance, si ça peut
vous intéresser.
Prévert,"les enfants du Paradis".

Avatar
Paul Gaborit
À (at) 19 Jun 2005 12:41:14 GMT,
(Pierre Génieys) écrivait (wrote):
Chaque numéro possède une relation (relative ou absolue)
avec ses parents. Le pb vient du fait que la référence
est formée parfois : - que du père
et d'autres fois : - du père et des grand parents



Ce que vous décrivez là ressemble à un treillis (un graphe orienté acyclique)
ou à un graphe de dépendances simples.

Le résultat n'est pas obligatoirement un arbre sauf à rajouter d'autres
hypothèses : 1(aucun ancêtre), 2(aucun ancêtre), 3(ancêtres: 1, 2). Bien sûr
on peut toujours ajouter un ancêtre arbitraire (0 par exemple) mais vous ne
pouvez pas déterminer pour autant le père de 4 sauf à forcer un lien parenté
entre 1 et 2...

Je ne connais pas de module Perl qui implémente cette structure de données. Ça
vaudrait le coup de s'y pencher car il existe des solutions algorithmiques
très spécifiques pour gèrer cela de manière efficace.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Thomas vO
bonjour,

À (at) 19 Jun 2005 12:41:14 GMT,
(Pierre Génieys) nous disait (told us):
Existe-t-il un module cpan pour gérer ces relations?
j'ai cherché des modules du genre "tree*" mais je n'ai pas trouvé
un module approprié


j'utilise le module GraphViz pour dessiner ce genre d'arbres...

--
Thomas vO - <http://www.enstimac.fr/~vanouden/>

Avatar
Patrick Texier
Le 19 Jun 2005 12:41:14 GMT, (Pierre Génieys) a
écrit :

Existe-t-il un module cpan pour gérer ces relations?
j'ai cherché des modules du genre "tree*" mais je n'ai pas trouvé
un module approprié


Si vous partez d'un fichier gedcom, vous avez le module Gedcom sur CPAN.

Personnellement, je le trouve très lourd et lent, comme tous les modules
Perl qui gèrent des données à partir de fichiers texte. Il y a un
convertisseur LifeLines->Perl : il est inutilisable, la version de
LifeLines est préhistorique et il n'y a même pas toutes les fonctions.

Avatar
Paul Gaborit
À (at) Mon, 20 Jun 2005 09:30:36 +0200,
Thomas vO écrivait (wrote):
bonjour,

À (at) 19 Jun 2005 12:41:14 GMT,
(Pierre Génieys) nous disait (told us):
Existe-t-il un module cpan pour gérer ces relations?
j'ai cherché des modules du genre "tree*" mais je n'ai pas trouvé
un module approprié


j'utilise le module GraphViz pour dessiner ce genre d'arbres...


C'est vrai que j'ai laissé de côté l'aspect représentation... Une fois le
graphe (ou arbre si c'est vraiment un arbre) (re)construit, on peut
effectivement le représenter via GraphViz. Mais, à mon sens, la vrai
difficulté est la reconstruction du graphe.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>