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 :

Implémentation d'un B+Tree pour le stockage d'une liste


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut Implémentation d'un B+Tree pour le stockage d'une liste


    Je vous expose la situation : il semblerai que les B+Tree soient les plus utilisés quand il s'agit de représenter une hiérarchie dans un système de fichier afin de stocker la liste des éléments enfants d'un dossier donné. En effet, avoir du O(log(n)) pour presque toues les opérations semble plutôt bien (moi je suis pour l'instant en O(n) avec la méthode la plus basique qui soit pour enregistrer ma liste ... ).

    Je voudrais donc implémenter mon propre B+Tree pour mon "système de fichier" (plus une base de donnée) afin d'améliorer les temps d'accès et de modifications des nodes. Cependant en cherchant sur le net soit j'ai trouvé des exemples trop spécialisés pour être utilisés (j'y comprends rien ) soit il manquait certaines opérations (dont la suppression d'une node, j'en ai besoin). Existe-t-il des descriptions complètes de l'algo sous une forme "simple" (pseudocode) sur le net ?

    Petite précision, je fonctionne avec des blocks de 64 octets, en comptant que chaque "pointeur" fait 8 octets je peut donc en mettre 8 par node. Donc à priori 7 de données et le 8ième qui pointe vers la node suivante. Les nodes doivent cependant êtres comparées par le nom, qui peut être obtenu en le lisant à partir du pointeur de la node (mais qui se trouve dans un autre bloc, avec ~32760 caractères maxi). Par contre, la lecture d'un bloc n'est pas très rapide donc une économie de n vers log(n) pourrait être intéressante. Le B+Tree est-il adapté à mon problème ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Existe-t-il des descriptions complètes de l'algo sous une forme "simple" (pseudocode) sur le net ?
    SUr le net je ne sais pas trop, tu peux trouver des infos dans le Cormen (introduction à l'algorithmique - chapitre 18 pour la deuxième édition)

    Tu pourras également trouver des infos dans le Handbook of Data structures and applications (Chapman - chapitre 15)

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Le truc c'est qu'il n'y a pas de libraires vendant ce genre de choses à coté de chez moi (je suis loin, même pas en France Métro) donc bon ... j'avais donc espéré qu'il existe des ressources (pdf, doc, html, etc...) montrant une implémentation simple du B+Tree (ou même, d'un B-Tree d'ordre 6 ou 7 si j'ai bien compris ce que ça veux dire) en pseudocode ou en pascal (facile à comprendre, avec le C/C++ les pointeurs commencent à noircir l'algo)... ça n'existe pas ?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Sur :
    http://en.wikipedia.org/wiki/B%2B_tree
    et http://en.wikipedia.org/wiki/B-tree

    Il y a un max de lien en dans la partie Ressources. Tu n'as rien trouvé de bien ?


    Il y a des sources Java et C++ d'ailleurs.

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Ben en fait chacune des sources présentées proposent une implémentation spécialisée de l'algo et finalement l'idée même du principe est un peut masqué (d'ailleurs les exemples que j'ai trouvé en C# ne sont pas vraiment documentés). Pour le C++ ... je suis nase en C++.
    C'est pour celà que je voulais d'une source en "pseudocode" afin de n'avoir que l'algo devant moi car je ne sais pas trop comment je vais l'implémenter (j'ai finalement trouvé quelques problèmes dont des possibles collisions avec des clefs différents qui auraient le même id.) donc voilà, les details de chaque langage alourdissent l'algo ... Mais je pense que je vais essayer de me lancer dans un BTree perso mais beaucoup de détails sont encore bizarres pour moi :

    Pour éviter d'accéder à un bloc trop souvent, je peut enregistrer un hashcode fait à partir du nom de la clef -> problème des collisions
    Mes "pointeurs" dans la BdD font aussi 8 octets, donc pour les feuilles j'aurai 7 clefs et pour les nodes internes 4 séparés par 3 hashcode -> what ?
    Et aussi savoir où stocker les hashcode.
    En fait j'ai de plus en plus l'impression que je vais m'orienter vers un arbre binnaire, mais la perte question espace risque d'être grande vis à vis d'une simple liste des clefs ...

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    On va faire autrement. Quel type de données veux tu exactement enregistrer ?

    Et qu'elles sont les opérations que tu souhaites ?

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par smyley Voir le message
    Le truc c'est qu'il n'y a pas de libraires vendant ce genre de choses à coté de chez moi (je suis loin, même pas en France Métro) donc bon ... j'avais donc espéré qu'il existe des ressources (pdf, doc, html, etc...) montrant une implémentation simple du B+Tree (ou même, d'un B-Tree d'ordre 6 ou 7 si j'ai bien compris ce que ça veux dire) en pseudocode ou en pascal (facile à comprendre, avec le C/C++ les pointeurs commencent à noircir l'algo)... ça n'existe pas ?
    http://www.jcolibri.com/livres/livre...el_indexe.html

  8. #8
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Tient j'avais oublié ce message
    Bon ben entre temps j'ai réussit à faire mon petit BTree et j'ai investit sur un AVL Tree (dont je n'ai rien compris) qui permet de rendre tout ça plus amusant.
    Merci à tous ceux qui m'ont inspiré

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

Discussions similaires

  1. cliquer sur un bouton pour tout selectionner dans une liste multiple
    Par PAYASS59 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/07/2007, 15h33
  2. aide pour le tri d'une liste
    Par dany9 dans le forum C
    Réponses: 13
    Dernier message: 01/03/2007, 10h52
  3. [Avancés pour débutante]Stockage d'une table (tableau associatif)
    Par delma dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 17/11/2006, 12h16
  4. Réponses: 28
    Dernier message: 24/05/2006, 18h20
  5. [CSS] largeur fixe pour les elements d'une liste
    Par arnolpourri dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/05/2006, 13h25

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