2010-08-18 2 views
9

Ich versuche, einen B-Baum gemäß dem Kapitel "B-Trees" in "Einführung in Algorithmen" zu implementieren.B-Tree - Warum kann es keinen Knoten mit einer geraden Anzahl von Schlüsseln geben?

Was ich nicht ganz verstehe, ist der "minimale Grad". In dem Buch wird angegeben, dass der Grad eine Nummer ist, die die untere/obere Grenze für die Anzahl der Schlüssel angibt, die ein Knoten halten kann. Es heißt es weiter, dass:

  1. Alle Nicht-Root-Knoten speichert mindestens t - 1 Schlüssel und hat t Kinder.
  2. Jeder Knoten speichert höchstens 2*t - 1 Schlüssel und hat 2*t Kinder.

So erhalten Sie für t = 2:

  1. t - 1 = 1 Tasten und t = 2 Kinder
  2. 2*t - 1 = 3 Tasten und 4 Kinder

Für t = 3

  1. t - 1 = 2 Tasten und t = 3 Kanal ildren
  2. 2*t - 1 = 5 Tasten und 6 Kinder

Jetzt ist hier das Problem: Es scheint, dass die Knoten in einem B-Baum nur eine ungeradee Anzahl der Schlüssel speichern können, wenn sie voll sind.

Warum kann es keinen Knoten geben mit, sagen wir höchstens 4 Schlüssel und 5 Kinder? Hat es etwas mit dem Teilen des Knotens zu tun?

+0

'in" Einführung in Algorithmen "' - und siehe da! _Welches_ "Einführung in Algorithmen": Autoren? Verlag? Sprache? ISBN? Hyperlink? – greybeard

Antwort

3

Es scheint, dass die Knoten in einem B-Baum nur eine ungerade Anzahl von Schlüsseln speichern können?

Definitiv nicht. Die von Ihnen geschriebenen Zahlen sind die minimale bzw. die maximale Anzahl der Schlüssel. Für t = 2 sind Knoten mit 1, 2, 3 Schlüsseln zulässig. Für t = 3 sind Knoten mit 2, 3, 4, 5 Schlüsseln zulässig.

Darüber hinaus darf die Wurzel des Baumes nur 1 Schlüssel haben.

Es ist möglich, Bäume zu definieren (und zu implementieren), die z. 1 oder 2 Schlüssel in einem Knoten (sogenannte 2-3 Bäume). Der Grund, warum B-Bäume definiert sind, um einen mehr aufzunehmen, ist, dass dies zu einer schnelleren Leistung führt. Insbesondere ermöglicht dies amortisierte O(1) (zählende Splitting- und Fügeoperationen) Lösch- und Einfügeoperationen.

+0

Natürlich hast du recht ... was ich meinte, war der Fall, wenn der Knoten voll ist - er kann dann nur ungerade Knotenzahlen enthalten. Dennoch verstehe ich nicht, warum dies zu einer besseren Leistung führt, siehe ire_and-curses Kommentar. – helpermethod

+0

@Helper Methode: Ok, ich denke, der zweite Absatz beantwortet Ihre Frage - brauchen Sie einen formellen Beweis? – jpalecek

+0

@jpalecek Ich habe die ursprüngliche Frage bearbeitet, aber das OP fragte tatsächlich, wann ein Knoten voll ist: Warum kann ein voller Knoten nicht eine gerade Anzahl von Schlüsseln haben? Das war die eigentliche nicht so klare Frage des OP, IMO. – nbro

1

ist es nicht unmöglich, aber suboptimal. Wie teilt man einen Knoten mit einer ungeraden Anzahl von Kindern auf?

+4

Ich verstehe dieses Argument nicht.Sie nehmen das Mediankind, verschieben es in das Elternelement und weisen dann alle Kinder rechts vom Median einem neuen Unterknoten des Elternelements zu. –

+0

@ire_and_curses Ich glaube, du bist zwischen Keys und Kindknoten verwirrt ... – nbro

Verwandte Themen