Einführung in die Informatik II Informatik B

Werbung
Prof. Dr. V. Linnemann
Ho Ngoc Duc
Lübeck, den 27. April 2006
Universität zu Lübeck
Institut für Informationssysteme
Einführung in die Informatik II
Informatik B
Sommersemester 2006
4. Übungsblatt
Aufgabe 1: Hashtabellen mit Kollisionsbehandlung
Fügen Sie die Schlüsselfolge 17, 42, 22, 4, 20, 29, 48, 35, 26, 38 in eine zu Beginn leere
Hashtabelle der Länge ein und verwenden Sie die /Hashfunktion mit . Als Kollisionsstrategie wird quadratisches Sondieren angewandt, d.h.
.
(6 Punkte)
Aufgabe 2: B-Bäume
a) Fügen Sie in den folgenden Ausgangs-B-Baum der Ordnung 2 in der gegebenen
! !"
Reihenfolge die Zahlen nacheinander ein. Verwenden Sie für das Einfügen den Algorithmus mit Anleihe beim linken Nachbarn. Zeichnen Sie nach jedem
Zwischenschritt den B-Baum, markieren Sie Überläufe.
(4 Punkte)
30 50 70 130
2
5
20
23
32
34 40 41
60 63
b) Folgender B-Baum der Ordnung 2 sei gegeben:
1/4
80 90 100 120
131 140
30
20 25
1 3
4
21
22
40 50
26 28
32 33 34
44 45
52 55
"
Löschen Sie in diesem B-Baum die Zahlen nacheinander in dieser Reihenfolge. Falls ein Element in einem Nichtblattknoten gelöscht wird, soll auf den
linken Subbaum zurückgegriffen werden. Zeichnen Sie den B-Baum nach jedem
Zwischenschritt. Markieren Sie auftretende Unterläufe und Anleihen. (5 Punkte)
c) Das Laden eines Knotenblockes des B-Baumes vom Hintergrundspeicher soll 100
Zeiteinheiten (ZE) dauern, der sequentielle Zugriff in einem Block 1 ZE pro Schlüs
in dem Ausgangs-B-Baum
sel. Wieviele ZE werden für die Suche nach der
vom letzten Aufgabenteil (b) benötigt, wenn zu Beginn kein Block geladen ist?
(1 Punkt)
Aufgabe 3: Implementierung von B-Bäumen
Entwickeln Sie eine Java-Anwendung zur Verwaltung von B-Bäumen beliebiger Ordnung. Auf der Web-Seite der Übung wird Ihnen die Klasse BBaum zur Verfügung gestellt, die einen B-Baum teilweise implementiert.
Die Baumknoten werden durch die Klasse BKnoten repräsentiert. Das folgende Listing
zeigt einen Teil dieser Klasse:
import java.util.*;
public class BKnoten {
private int ordnung;
private BBaum baum;
private BKnoten vater;
private List schluessel;
private List kinder;
public BKnoten(BBaum baum, BKnoten vater, int ordnung) {
this.baum = baum;
this.vater = vater;
this.ordnung = ordnung;
this.schluessel = new ArrayList();
this.kinder = new java.util.ArrayList();
}
// ...
}
2/4
In einem Knoten werden die Schlüssel in der Liste schluessel gespeichert. Die in
den Knoten gespeicherten Schlüssel müssen das Interface Comparable implementieren. Die Verweise auf Kinderknoten befinden sich in der Liste kinder. Ist der Knoten
ein Blatt, dann ist die Liste kinder leer. Die Variable baum verweist auf das BaumObjekt, zu dem der Knoten gehört. Die Variable enthält die Referenz auf den Vaterknoten bzw. null wenn der Knoten die Wurzel des B-Baumes ist.
a) Implementieren Sie die Methode public Comparable suchen(Comparable
key) in BKnoten. Diese Methode soll rekursiv in dem Knoten und in den Nachfahren nach dem gegebenen Schlüssel suchen. Ist der Schlüssel im Baum enthalten, wird das im Baum gespeicherte Objekt zurückgegeben. Andernfalls gibt die
Methode null zurück.
(14 Punkte)
b) Schreiben Sie eine Hilfsmethode int einfuegePosition(Comparable key,
List ls) in Klasse BKnoten. Diese Methode berechnet die Stelle, in die der
Schlüssel key in die sortierte Liste ls eingefügt werden muss, damit die Ergeb .
nisliste sortiert bleibt. Der Rückgabewert ist also eine Zahl mit ! Wenn z.B. ls die Elemente enthält, dann ist die Einfügeposition 0 für
Schlüssel kleiner als 20; sie ist 1 für Schlüsselwerte zwischen 20 und 30 usw. (4 Punkte)
c) Wenn ein Schlüssel in einen B-Baum eingefügt werden soll, muss zunächst festgestellt werden, in welchen Teilbaum dieser Schlüssel einzufügen ist. Implementieren Sie zu diesem Zweck eine Methode BKnoten getTeilbaumFuer(Comparable
key) in BKnoten, die für einen Nicht-Blatt-Knoten den Kindknoten zurückgibt,
der die Wurzel des Teilbaumes bildet, in den der Schlüssel key einzufügen ist. (6 Punkte)
Testen Sie Ihre Implementierung mit der Klasse BBaumTest, die ebenfalls auf der Übungsseite bereitgestellt wird.
3/4
Hinweise
Kommentieren Sie Ihre Lösungen ! Falls Implementierungen auf dem Blatt gefordert werden, sind diese in gezippter Form mit dem Betreff: Blatt und der entsprechenden Nummer an [email protected] zu schicken, wobei das X durch Ihre Gruppennummer zu ersetzen ist.
Die Gruppeneinteilung für das Sommersemester befindet sich auf der Übungsseite zur Vorlesung und ist bitte unbedingt zu beachten. Falls dennoch ein Tausch
erforderlich sein sollte, kann dieser nur innerhalb der Gruppen des eigenen Studiengangs stattfinden.
Die erste Seite soll oben rechts die Namen der beiden Abgebenden und die Übungsgruppennummer (wichtig!) enthalten. Besteht eine Lösung aus mehreren Zetteln,
so sind diese zusammen zu heften. Bitte keine Hüllen, Mappen, o.ä.
Zertifikat/Scheinkriterium: Für den Schein/das Zertifikat sind 50% der erreichbaren Punkte von jedem Übungsblatt, zweimaliges Vorrechnen in der Übung und
das Bestehen der Klausur am Ende des Semesters erforderlich.
Abgabetermin: Donnerstag, 4. Mai 2006, nach der Vorlesung
4/4
Herunterladen