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

C++ Discussion :

Arbre naire en C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Par d�faut Arbre naire en C++
    Bonjour,

    J'ai actuellement besoin pour mon projet de pouvoir g�rer des arbres n-aires.
    Il n'y a pas dans la STL en standard de telle conteneur, j'ai vu sur internet qu'il existe de nombreuses librairies ou sources pour r�aliser ces arbres.

    Quelle est selon vous la meilleure solution ? Mes imp�ratifs sont :
    - gestion d'arbre n-aires (pas uniquement binaire)
    - chaque noeud de l'arbre pourra contenir n'importe quelle type de donn�es (une struct dans mon cas pr�cis�ment)
    - on devra naturellement trouver les fonctions usuels inh�rentes aux arbres : ajout d'un fils ain�, d'un fr�re, parcours de l'arbre selon plusieurs m�thodes, recherche d'une valeur particuli�re dans l'arbre
    - j'aimerais de plus pouvoir visualiser (meme dans une console en mode texte) l'arbre cr�e.

    Petit pr�cision je suis linux ubuntu 6.10 & gcc .
    merci par avance

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    98
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 98
    Par d�faut
    Salut,

    Je pense qu'il y a plusieurs r�ponses possibles et correctes � ton probleme. Cependant tu devrais pr�ciser quels sont tes d�sir du point de vu de la performance de la simplicit� du code etc ....

    Ensuite essayer de nous pr�senter une piste que tu emprunterais par toi m�me pour que la discussion soit constructive et non pas simplement un code tout crach�.

    @ ++
    Seb

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Par d�faut
    J'ai besoin d'un code le plus �pur� possible. Plus simplement je ne veux pas une classe faisant des tonnes de fonctions qui ne me serviront � rien.

    Concernant les performances on va dire que j'aurais des arbres � environ 10 branches avec une profondeur total de 15, j'ai besoin de pouvoir parcourir cette arbre assez rapidement pour trouver pr�cisement une valeur. Mon appli doit pouvoir tourner en temps r�el.

    Concernant les pistes je me suis orient� sur ceci pour le moment :
    www.up.univ-mrs.fr/wcpp/V1/Lecons/L19.pdf

    J'ai adapt� ce code � mon programme il marche tr�s bien mais il me manque plusieurs fonctions, notemment une fonction permettant de visualiser "graphiquement (le mode texte m'irait amplement) l'arbre construit.

    Sinon il existe aussi cette classe :
    http://stlplus.sourceforge.net/stlplus/docs/ntree.html

    mais je pense qu'il y'� beaucoup de choses dont je n'aurais pas l'utilit�.

    merci

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Une des solutions les plus simples, c'est tout simplement une structure ou une classe sous la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    struct noeud
    {
        noeud(type& data,noeud* parent=NULL):m_parent(parent),
                                             m_data(data){}
        ~noeud()
        {
            //il faut détruire les enfants
            for(unsigned int i=0;i<m_enfants.size();i++)
                delete m_enfants[i];
           //par acquit de conscience
           m_parent=NULL;
           m_enfants.clear();
        }
        noeud * parent;
        std::vector<noeud*> m_enfants;
        type m_data;
        bool IsSheet()const{return m_enfant.size()==0;}
        bool IsRoot()const{return m_parent==NULL;}
    };
    Evidemment, dans l'exemple tel que je te l'ai donn�, il n'y a aucune encapsulation, et ce n'est pas forc�ment des plus conseill� en orient� objet...

    Mais, si tu utilises une classe au lieu d'une struct, il te suffira de mettre les accesseurs/mutateurs qui vont bien

    Si tes noeud doivent �tre tri�s, rien ne t'empeche de te tourner vers une std::map ou tout autre conteneur associatif s'adaptant � tes besoins
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    Membre chevronn�
    Avatar de NewbiZ
    Profil pro
    �tudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par d�faut
    Il me semble qu'en informatique, lorsqu'on parle de feuille, on ne fait pas r�f�rence � celle sur laquelle on �crit , mais plutot � celle effectivement de l'arbre (leaf)
    (monsieur tatillon aujourd'hui)

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par NewbiZ
    Il me semble qu'en informatique, lorsqu'on parle de feuille, on ne fait pas r�f�rence � celle sur laquelle on �crit , mais plutot � celle effectivement de l'arbre (leaf)
    (monsieur tatillon aujourd'hui)
    Et tu as raison... simplement, monsieur fatigu� aujourd'hui a �crit le premier terme qui lui est pass� par la tete en pensant "feuille"
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  7. #7
    Membre chevronn�
    Avatar de NewbiZ
    Profil pro
    �tudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par d�faut
    Ca va encore, tu aurais pu tomber sur 3�me possibilit�

  8. #8
    Membre habitu�
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par d�faut
    Citation Envoy� par NewbiZ
    Ca va encore, tu aurais pu tomber sur 3�me possibilit�
    euh... foil?

  9. #9
    Membre exp�riment� Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    D�tails du profil
    Informations personnelles :
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par d�faut
    un tas? facile, bonne complexit� ... un tableau simple pour stocker

  10. #10
    Membre �m�rite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par d�faut
    Autre piste � �tudier �galement c'est si tu doit g�rer plusieurs arbre n-aires dont chacun g�re des type de donn�es diff�rentes.

    C'est une question � se poser assez t�t car selon les cas du devra t'orienter vers un �criture de code un peu diff�rente.

    PS : si j'ai bien compris tes besoins, tu penses que ton programme ne g�reras pas un arbre volumineux en m�moire. En revanche arriverais tu as pr�ciser tes contraintes pour le temps r�el ?

    Op�rations synchrones / asynchrones (oui, oui en temps r�el c'est parfois possible) ?
    Fr�quence des op�rations sur l'arbre tr�s �lev�es / faibles ?
    ...

Discussions similaires

  1. Longueur chemin entre 2 noeuds d'un arbre naire
    Par alex2746 dans le forum G�n�ral Java
    R�ponses: 16
    Dernier message: 26/08/2011, 10h25
  2. arbres BB
    Par cedrick essale dans le forum Algorithmes et structures de donn�es
    R�ponses: 4
    Dernier message: 03/12/2002, 15h39
  3. Qu'est ce qu'un arbre
    Par sandrine dans le forum C
    R�ponses: 8
    Dernier message: 23/10/2002, 13h12
  4. 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
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    R�ponses: 7
    Dernier message: 09/09/2002, 08h09

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