2013-04-14 11 views

Antwort

4

Eigentlich Die Antwort ist ja.

Der Hauptunterschied zwischen B + -Bäumen und einfachen B-Bäumen besteht darin, dass die Werte tatsächlich in den Blättern für Erstere gespeichert werden, während im späteren Fall Werte in jedem Knoten gefunden werden. Mit B + -Bäumen können Sie also Daten nahezu kontinuierlich speichern, wobei jedes Blatt ein zusammenhängendes Stück der gesamten sortierten Daten enthält. Dies kann nicht für B-Bäume gelten: Ein innerer Knoten enthält mehrere Elemente, die jedoch nicht zusammenhängend sind. der ganze sortierte Datensatz.

Diese Eigenschaft ist für das Massenladen von Bedeutung: Dieser Prozess funktioniert bei einem bereits sortierten Datensatz, indem er in die Arrays geschnitten wird, die die Blätter des B + -Baums bilden. So sieht es für einen B-Baum aus, dass es nicht funktionieren kann.

Wenn wir die Daten auf eine Weise sortieren können, die innere Knotenelemente zusammenfasst, dann ist das Problem gelöst. Um dies zu tun, muss man im Voraus wissen, wie die Elemente gruppiert werden. Dies stellt sich als möglich heraus.

Lassen Sie uns o (Reihenfolge) die minimale Anzahl der untergeordneten Elemente in einem Knoten (die mit der ursprünglichen Definition einer B-Baum-Reihenfolge übereinstimmt) aufrufen. Wir betrachten den Wurzelknoten als auf der höchsten Stufe des Baumes und die Blätter als am niedrigsten (Stufe 0). Für einen gut ausbalancierten Baum werden alle Blätter tatsächlich auf der gleichen Stufe sein.

Die Stufe k der Baumgruppen Elemente, die um mindestens o Elemente in der Stufe k-1 beabstandet sind. Nach einer anfänglichen Sortierung müssen wir Elemente aus dem sortierten Array, das die Stufe 0 darstellt, extrahieren und sie in einem anderen Array gruppieren, um Stufe 1 zu erstellen, und dann das Array mit dieser Anordnung erneut in ein neues Array für Stufe 2 einfügen und den Vorgang wiederholen bis es weniger als o Elemente im neuesten Array gibt, das die Root-Stufe sein wird. Von nun an ist es möglich, den Baum direkt aus dem Bühnenbild aufzubauen:

  • Split jede Stufe in Arrays von o Elementen,
  • build Indexarrays Knoten zu verknüpfen
  • build jeden Knoten als Subknoten das Paar des entsprechenden Indexarrays * Wertarray

Der resultierende Baum muss nicht unbedingt gut ausbalanciert sein. Dies hängt von der Anzahl der Einträge im Dataset und o ab. Es sollte möglich sein, das Intervall, das beim Erstellen der Stufen verwendet wird, abzustimmen, um einen besseren verteilten Baum zu erhalten.

Alles in allem ist die Arbeit, die benötigt wird, um einen B-Baum in großen Mengen zu laden, mühsamer als für B + -Baum, aber es ist möglich.