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

Python Discussion :

Structure de données sous forme d'arbre


Sujet :

Python

  1. #1
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut Structure de données sous forme d'arbre
    Bonjour à tous,

    Je cherche actuellement le meilleur moyen pour gérer une structure de données sous forme d'arbre "(d'id")

    les id représentent en fait des catégories et sous catégories .

    Auriez-vous des pistes à me suggérer ?

    Merci d'avance ,

    Ch.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 330
    Points : 36 849
    Points
    36 849
    Par défaut
    Salut,
    Pourquoi ne pas partir d'un pattern "composite" ou d'un dict de dict?
    - W

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Bonjour.

    Attention aux arbres. Pourquoi ? Cette structure théorique peut avoir différentes implémentations et quelques fois il est plus simple d'utiliser des listes de listes, ou des dictionnaires de listes ou de dictionnaires, ou de passer par du XML... etc., que de vouloir implémenter une classe générique Tree en Python. Je me suis déjà fait avoir à ce petit jeu.

    Le plus simple serait d'avoir une description précise du type d'arbre à manipuler.

  4. #4
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut
    Salut,
    Pourquoi ne pas partir d'un pattern "composite" ou d'un dict de dict?
    - W
    Je ne connais pas ce pattern, ça semble être effectivement une solution que je garde sous le coude.

    Bonjour.

    Attention aux arbres. Pourquoi ? Cette structure théorique peut avoir différentes implémentations et quelques fois il est plus simple d'utiliser des listes de listes, ou des dictionnaires de listes ou de dictionnaires, ou de passer par du XML... etc., que de vouloir implémenter une classe générique Tree en Python. Je me suis déjà fait avoir à ce petit jeu.

    Le plus simple serait d'avoir une description précise du type d'arbre à manipuler.
    En fait jusque là j'ai trouvé deux solutions, la premiére, le module ete2 qui semble répondre à ce genre de problématique.
    La seconde, un dict de dict sérialisé avec cPickle ou json pour le coté sauvegarde, seul hic ( enfin c'est un petit hic ) est que lorsque je souhaite me "balader" / "modifier" un noeud de mon arbre, cela va me demander des "for in" à gogo , ne serait ce que pour localiser mon noeud, et ça ne me plait pas trop, je cherche une solution plus éfficace.

    Pour ce qui est de la structure, c'est ni plus ni moins qu'un arbre d'id chaque id représente un enregistrement en base , afin que je récupère d'autres infos.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Dans ce cas, pourquoi pas un simple dict {id: (parent, [child, ...])} (parent et child étant du même type qu’id)*? De cette façon, on a accès à tous les nœuds directement par leur id, et de façon “arborescente” en suivant les chaînes de parentées, le tout avec une structure de données plane…

    Enfin, c’est juste une idée, à vous de voir.

  6. #6
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut
    Trés bonne idée .. je ne sais pas pourquoi dans ma tête je ne voyais pas autre chose qu'une structure "arbre".

    Comme quoi une idée peut en cacher d'autres .. bien meilleurs

    Merci ,

    je pense partir sur cette idée qui devrait répondre à mes besoins .

    Je et ce sujet en RESOLU cependant si d'autres personnes ont des suggestions, je suis bien évidemment toujours preneur .

    Bonne soirée,

    Ch.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 330
    Points : 36 849
    Points
    36 849
    Par défaut
    Salut,

    Si votre soucis est côté "persistance" jetez un œil à HDF.
    Après tout dépend de la taille et de la profondeur.
    Vous avez des solutions côté SGDB avec nested set.
    Mais le module shelves peut aussi très bien faire l'affaire.
    Vous pouvez aussi stocker du JSON dans un cluster Hadoop.

    Côté programmation, c'est toujours le "pattern composite".
    Persistance et choix d'un "backend" pour stocker des millions de nœuds, garder en mémoire qu'un s/ensemble de... accéder rapidement aux nœuds relèvent d'une architecture technique, la "programmation" vient après.

    - W

  8. #8
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut
    Merci pour ces informations sur le sujet .

    Je travaille actuellement sur une base MongoDB, qui offre aussi une representation nested set

    http://docs.mongodb.org/manual/tutor...ee-structures/

    Des approches qui semblent intéressantes bien que mon besoin ne requiert pas une telle infra pour ce point.

    "4 arbres d'une profondeur de 20 niveaux environ"

    Mais je vais explorer ces point malgré tout, ne serait-ce que par curiosité ( et qui peut le plus, peut le moins )

    Merci encore .

    Ch.

  9. #9
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Citation Envoyé par Stopher Voir le message
    Trés bonne idée .. je ne sais pas pourquoi dans ma tête je ne voyais pas autre chose qu'une structure "arbre".
    C'était à cela que je pensais dans mon post.

  10. #10
    Membre averti Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Points : 446
    Points
    446
    Par défaut
    Un grand merci à vous,

    j'ai finalement opté pour le fonctionnement suivant

    qui reprend en fait toutes vos idées , j'ai juste remplacé les "nom" des catégories ( dans l'exemple ci-dessous : Books, Programming, Databases ) par des références à d'autres document ( Propre à MongoDB )

    Celà fonctionne parfaitement et répond à 100% à mes besoins .

    Voilà pour le retour sur le sujet .

    Merci encore,
    Ch.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2011, 15h36
  2. renvoyer des données sous forme de XML hiérarchique
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/01/2005, 18h06
  3. Exporter des données sous forme de requetes
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2004, 17h27
  4. Exportattion de données sous forme de fichiers
    Par bidson dans le forum XMLRAD
    Réponses: 20
    Dernier message: 08/06/2004, 13h25
  5. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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