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 :

Reconstruire un arbre par représentation intervallaire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut Reconstruire un arbre par représentation intervallaire
    Bonjour,
    J'utilise un arbre par représentation intervallaire.
    Un user peut choisir un nombre quelconque d'items, et je souhaite reconstruire une arborescence pour cet user.
    Exemple :
    Arbre principal :
    +félins
    ++chats
    +++chats de gouttière
    ++++chat de mon voisin
    ++++chat perdu

    L'user choisit chats et chat de mon voisin. Je souhaite produire l'arbre suivant :
    +chats
    ++chat de mon voisin.

    Actuellement, je recopie l'arbre principal dans une table temporaire, et je supprime chaque item non sélectionné, puis je récupère l'arbre restant. Ca fonctionne, mais c'est horriblement lourd. Pour un arbre à 500 items, et deux items sélectionnés, il faut compter 1500 requêtes sql (3 requêtes par item supprimé).
    Qui aurait une méthode plus élégante pour reconstruire l'arbre ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il doit falloir partir de la liste des sélectionnés... Puisque seuls ceux ci seront dans l'arbre...

    A priori j'essaierai un truc comme :
    1- on prend le noeud sélectionné le plus haut dans la hiérarchie, et on le met dans l'arbre en niveau un.
    2- pour chaque noeud, on regarde si c'est un enfant d'un noeud dejà écrit (auquel cas on le lui ajoute comme enfant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    + noeud 1
    ++ noeud 2
    +++ nouveau noeud
    si c'est un enfant de noeud 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    + noeud 1
    ++ noeud 2
    ++ nouveau noeud
    si c'est un enfant de noeud 1

    Pour bien faire, il faut chercher dans l'arbre déjà construit en partant du bas...

    sinon on l'ajoute à la fin, au sommet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    + noeud 1
    ++ noeud 2
    + nouveau noeud

    3- quand il n'y a plus de noeud sélectionné, on a fini...

    Francois

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Merci, je pense que c'est dans ce sens que je dois aller. J'ai déjà essayé, mais je n'ai pas encore réussi à conceptualiser une solution viable.
    S'il y a des exemples d'implémentation...

Discussions similaires

  1. Gestion d'arbres par représentation intervallaire - Déplacements et tris
    Par samche dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 18/06/2013, 15h58
  2. Réponses: 0
    Dernier message: 24/08/2007, 10h19
  3. Gestion d'arbres par représentation intervallaire
    Par Djebel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/10/2006, 17h28
  4. arbre par représentation intervallaire
    Par peuf23 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/10/2006, 23h16
  5. Gestion d'arbres par représentation intervallaire
    Par brice01 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/01/2006, 21h20

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