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 :

Arbre en Python


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut Arbre en Python
    Bonjour tout le monde,
    Je veux développer un arbre2-3 en python, si vous pouvez me donnez une idée sur l 'architecture

    voilà ce que j'ai commence à faire

    ps dans un arbre 2 3 chaque noeud a soit deux clefs( donc trois fils (noeud)) ou une clef est donc deux fils
    Node.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Node(object):
     
     
    	def __init__(self):
     
                    //premiere clef
    		self.First=0
    		self.secondCle=0

    Tree.py


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import Node
    class Tree(object):
     
    	def __init__(self):
     
    		self.root=Node.Node()
    		self.fg=Node.Node()
    		self.fd=Node.Node()
    		self.fm=Node.Node()
    donc là j'essaye de faire une méthode fin(clef) qui cherche la cle donnée en paramètre dans l arbre

    si quelqu'un peut me donner une idée sur l'implémentation de l algorithme?
    et si vous pouvez me dire ce que vous pensez par rapport à mes deux classes?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut Des questions
    Bonjour,
    Je ne comprend pas tout :
    :
    1°) Peux tu confirmer cette correction
    ps dans un arbre 2 3 chaque noeud a soit deux clefs( donc trois fils (noeud)) ou une clef est et donc deux fils
    2°) Peux tu confirmer cette correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    //premiere clef
    		self.FirstCle=0
    		//seconde clef
    		self.secondCle=0
    3°) Le but d'une classe est d'encapsuler toutes les méthodes liés à un objet, il me semble dommage de créer deux classes (node + tree), autant tout mettre dans une classe arbre (d'ailleur un node fait partie d'un arbre)
    4°) Pourrais tu donner un exemple complet avec des nodes des clefs et un exemple de recherche car il est difficile de comprendre ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		self.root=Node.Node()
    		self.fg=Node.Node()
    		self.fd=Node.Node()
    		self.fm=Node.Node()
    5°) Tu pourrais utiliser une lib du style de xml.dom (sauf si tu veux créer quelque chose, ce que je comprends très bien).

    Bon courage

    Alex

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    En cherchant sur Google, on trouve 2-3 Tree qui donne une idée d'architecture et de quantité de code à écrire.

    Bon courage,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre Expert

    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
    Par défaut
    Je ne suis pas un spécialiste des arbres et n’ai pas le temps de chercher comment sont organisés (“triés”) les nœuds d’un arbre 2 3 en fonction de leurs clés, donc je ne peux pas vous aider pour la fonction de recherche…

    Par contre, s’il faut évidemment deux classes (une pour l’arbre, l’autre pour ses nœuds), il me semble que les membres fg/fd/fm doivent appartenir à Node, pas à Tree*! Sinon, comment voulez-vous obtenir une arborescence*?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Combien faut-il de classes ? On peut choisir différentes représentations:

    Une classe "Tree" ou pas

    La classe Tree n'est pas strictement nécessaire. Sans elle, l'arbre sera simplement représenté par son Noeud racine. La valeur None peut indiquer un arbre vide. C'est simple, mais cela nécessite une API de type fonctionnelle, en tout cas pour les méthodes qui peuvent changer le noeud racine. Par fonctionnelle, je veux dire que ces méthodes doivent retourner la nouvelle racine et qu'il faut écrire arbre = arbre.insert(...) par exemple.

    Cela peut sembler contraignant, mais en poussant un peu plus loin on peut envisager en faire une structure de données persistante(= non mutable). Cela signifie qu'on ne modifie jamais un arbre existant; on retourne un nouvel arbre à la place. Cela a certains avantages et ce n'est pas aussi lourd qu'il y parait (il ne faut pas recopier tout l'arbre à chaque opération, seulement les noeuds qui sont modifiés).

    A l'opposé, la classe Tree permet de présenter une API plus classique pour une structure de donnée mutable. Mais j'éviterais de définir trop de choses dans la classe Tree; la plupart de ses méthodes devraient simplement déléguer à la classe Noeud. La classe Tree ne serait qu'une couche au-dessus de l'API décrite ci-dessus.

    Une classe Noeud ou plusieurs

    Indépendamment de la présence ou l'absence de la classe Tree, dans une optique plus orientée objet, on peut définir des classes séparées pour un noeud à 2 enfants, un noeud à 3 enfants, et une feuille. Dans d'autres langages OO, les 3 classes hériteraient d'une classe Noeud abstraite, mais en Python, grâce au "duck typing", c'est optionnel. Cela peut néanmoins servir pour éviter la duplication de code dans les sous-classes.

    Fait correctement, cela donnera un code plus facile à étendre et maintenir que de tout regrouper dans une seule classe "Noeud".

Discussions similaires

  1. Arbre phylogenetique - python
    Par chlowecita dans le forum Général Python
    Réponses: 33
    Dernier message: 28/04/2014, 13h50
  2. Cours et tutoriels pour apprendre Python
    Par gzalol dans le forum Général Python
    Réponses: 0
    Dernier message: 17/12/2013, 18h18
  3. Comment representer un arbre (binaire ou non) en python?
    Par MadCat34 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/03/2006, 16h25
  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