web-dev-qa-db-fra.com

Comment entrer des enregistrements avec des clés à un arbre B + vide d'initialement?

Montrent le résultat de la saisie des enregistrements avec des touches dans la commande (1, 2, 3, 4, 5) à un fichier B + -Tree d'ordre initialement vide M = 3. En cas de débordement, diviser le nœud et ne pas répartir clés des voisins. Est-il possible d'entrer les enregistrements avec des clés d'un ordre différent d'avoir un arbre de moins de hauteur?

De Relational DBMS Internals, Chapitre 5: Organisations de structure d'arbres dynamiques, p.5

Je ne suis pas bon sur cela encore j'ai essayé de faire ≤ à gauche et> à droite:

Jusqu'à l'insertion de 1,2:

enter image description here

Ensuite, aussi loin que nous devons diviser le nœud et ne pas redistribuer les clés des voisins (je comprends comme des nœuds de fils) je ne suis inséré que sur le droit de cellule avec 2:

enter image description here

Et j'ai continué à faire la même chose avec quand l'insertion 5:

enter image description here

Mais c'est assez étrange, je n'ai jamais vu de nœuds vides comme ceux-ci ... et je ne sais pas s'il respecte des propriétés très basiques des arbres B:

  • chaque nœud a au plus (M-1) Touches et au moins (⌈ (m/2) ⌉-1) Touches sauf si une touche peut être vide Et je comprendrais la clé comme un "pointeur".

Première tentative: erreur dans l'ordre a révélé un arbre ambigu

Au début, j'ai mal compris ce qu'un "ordre" était (le nombre maximum d'enfants par nœud). Je pensais donc qu'un nœud pouvait avoir trois espaces (et donc 4 enfants. Je créais un arbre d'ordre 4, je pense:

Jusqu'à l'insertion de 1,2,3:

enter image description here

L'insertion de 4, dans la mesure où nous devons diviser le nœud et ne pas résontir les clés des voisins (qui semble contradictoire), je laisserais 1,2,3 et 4,5 sur la feuille droite après 3:

B tree of order 3 after inserting 4 & 5

11

Je pense que vous avez la création de votre page à l'envers. Lorsqu'un noeud se sépare, il ne crée pas plus de nœuds vers le bas la hiérarchie (nœuds fils dans votre nomenclature). Au lieu de cela, cela crée plus vers le haut, vers la racine. Comme le livre dit

Notez que la croissance est au niveau haut ​​de l'arborescence, et il s'agit d'une caractéristique intrinsèque d'un arbre B pour assurer les propriétés importantes qu'il a toujours toutes les feuilles au même niveau et chaque nœud différent de la racine est d'au moins 50% plein.

(Mon emphase.)

Du livre électronique lié:

Définition 5.1 A B-Tree de commande M (m ≥ 3) ... Chaque nœud contient au plus de clés M - 1

L'exercice est pour M = 3, donc au plus 2 clés par nœud.

Les deux premières clés sont faciles - elles vont dans la première page:

A:[1,2]

Je vais utiliser ASCII Art. Je vais étiqueter chaque page dans la séquence, elles sont créées et affichent les touches/pointeurs de la page. Alors Page P contenant des valeurs de clé K1 et K2 sera P:[k1,k2].

Maintenant la clé 3 vient. Selon la section 5.2.1 ... insertion, la première tâche est de rechercher. Cela détermine la clé 3 devrait être à la page A - la seule page que nous avons. En outre, "si [ce nœud] est plein, il sera divisé en deux nœuds." La page est pleine de sorte qu'il doit se diviser. Nous avons maintenant

A:[1,2]    B:[3, ]

Mais ce n'est pas un arbre! Comme le livre dit:

le pointeur sur [le nouveau nœud], .. est inséré dans le Père noeud .. du [Nœud actuel], répétant l'opération d'insertion dans ce nœud [I.E. le noeud père]. Ce processus de fractionnement et de déménagement peut continuer si nécessaire jusqu'à la racine, et si cela doit être divisé, un nouveau nœud racine sera créé ..

(Mon accent mis sur montrer le traitement continue l'arbre vers la racine, pas vers le bas vers les feuilles.)

Nous devons donc mettre un pointeur à la nouvelle page (b) dans le père de la page actuelle (A). Il doit y avoir un nouveau nœud racine:

      C:[2,3]
      /     \
A:[1,2]    B:[3, ]

J'ai les indications dans les pages non-feuilles pointant vers la plus haute valeur dans un nœud enfant (fils). Votre texte lié peut le faire différemment, mais le résultat sera équivalent.

La valeur clé 4 arrive; Suite à l'algorithme que nous recherchons pour trouver quelle page il devrait être sur. Il devrait être la page B. Il y a de la place pour cela, nous mettons donc à jour cette page et le pointeur à la page C:

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]

Ensuite, nous insérons la clé 5. Cela devrait aller à la page B, mais c'est plein. Donc il se divise

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]   D:[5, ]

Nous devons mettre à jour le noeud père. Aussi, c'est plein de sorte qu'il se divise:

      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

La scission se propage et un nouveau noeud racine forme:

            F:[4,5]
            /     \
      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

En grandissant, l'arbre maintient une profondeur identique dans chaque branche. Ceci est important pour des performances prévisibles. (Certains disent que le B dans B-Tree signifie "équilibré" pour cette raison même.)


Quant à la deuxième partie - "est-il possible d'entrer les enregistrements avec des clés dans un ordre différent d'avoir un arbre de moins de hauteur?" Avec 5 clés et deux clés par nœud, nous avons besoin d'au moins 3 nœuds de feuilles pour maintenir toutes les valeurs et une hauteur de 3 pour former l'arbre. Donc, mon arrangement est optimal pour les données, la séquence et l'algorithme donné.

Le livre utilise un arrangement de pointeur très différent sur ce que j'utilise et un arrangement divisé différent. Ce sera significatif, conduisant à des pages complètes en partie. Qu'il y a une section à la page 42 appelée "chargement de données" qui montre comment les pages plus complètes peuvent être obtenues en chargement hors de la séquence clé supporte mon hunch. Cependant, j'espère que je vous ai donné suffisamment de pointeurs et vous pourrez utiliser la structure du pointeur du livre pour vous entraîner.


J'ai rencontré cette simulation interactive de la façon dont un arbre B devient.

6
Michael Green