Algorithmen und Datenstrukturen – Übung 7 Aufgabe 1 Stellen Sie jeweils einen Algorithmus (in Pseudo-Code) auf, um in einem B-Baum... a) Den kleinsten enthaltenen Schlüssel zu finden. b) Den größten enthaltenen Schlüssel zu finden. c) Eine gegebene Menge von Schlüsseln so einzufügen, so daß die Anzahl von Knoten maximiert wird (also der Baum minimal gefüllt ist). d) Wie sollte ein B-Baum befüllt sein, um vor allem lesende Zugriffe zu beschleunigen? e) Wie sollte ein B-Baum befüllt sein, um die nächsten schreibenden Zugriffe zu beschleunigen? f) Wie kann man das Erstellen eines B-Baumes zu einer gegebenen, sortierten Datenmenge beschleunigen? Lösungsvorschlag: a) Der Schlüssel steht ganz links im Baum, man muss sich also nur am jeweils linkesten Zeiger entlanghangeln: Knoten akt = Wurzel Solange akt.Zeiger [0] != null akt = akt.Zeiger [0] Ergebnis = akt.Schlüssel [0] b) Der Schlüssel steht ganz rechts im Baum, man muss sich also am jeweils rechtesten, existenten Zeiger jedes Knotens entlanghangeln und dann den rechtesten Schlüssel aus dem aufgefundenen Knoten entnehmen. Knoten akt = Wurzel FOR (n = 0; akt.Zeiger [n] != null; n++) Solange n > 0 akt = akt.Zeiger [n - 1] FOR (n = 0; akt.Zeiger [n] != null; n++) FOR (n = 0; akt.Schlüssel [n] != null; n++) Ergebnis = akt.Schlüssel [n - 1] c) Wenn man die Schlüssel vorsortiert einfügt, dann wird jeder Schlüssel immer an die rechteste Position gesetzt, das heißt, dort werden die Knoten gefüllt, nach dem Split bleibt der linke Split-Knoten unberührt, also minimal gefüllt usw. Sortiere Schlüssel FOR (alle Schlüssel) Einfügen in B-Baum d) Die Höhe bestimmt die Anzahl der Plattenzugriffe, also die zeitkritischen Operationen. Daher sollte der Baum möglichst dicht besetzt sein. e) Der Aufwand für schreibende Zugriffe wird im wesentlichen durch die Notwendigkeit für eine Reorganisation beeinflusst. Daher sollte der Baum möglichst wenig dicht besetzt sein f) Durch Bulk-loading: Statt einen Schlüssel nach dem anderen einzufügen, sortiert man die Schlüsselmenge mit einem effizienten Sortieralgorithmus vor, legt einen entsprechend dimensionierten, leeren Mehrwegbaum an und füllt ihn knotenweise, so dass sich ein BBaum ergibt.