11. ¨Ubungsblatt - Universität Konstanz

Werbung
Datenstrukturen und Algorithmen
WS 01
Universität Konstanz
Lehrstuhl für Praktische Informatik
Prof. Dr. D. Wagner / T. Willhalm
11. Übungsblatt
Abgabe: 17. Januar 2002, 12 Uhr in den Fächern vor dem Sekretariat E212
Aufgabe 1 (4 Punkte)
Definition: Der binomiale Baum Bk für k ≥ 0 ist wie folgt rekursiv definiert:
• B0 besteht aus einem einzelnen Knoten.
• Bk für k > 0 besteht aus zwei binomialen Bäumen Bk−1 , wobei die Wurzel des einen Baumes
zum linkesten (direkten) Nachfolger der Wurzel des anderen Baumes gemacht wird. Die
Wurzel des zweiten Baumes ist also auch die Wurzel von Bk .
(a) Zeigen Sie, wieviele Knoten und welche Höhe Bk für k ∈ IN hat.
(b) Zeigen Sie, wieviele Knoten der Tiefe i für k ∈ IN und i = 0, 1, . . . , k es gibt.
Aufgabe 2 (4 Punkte)
Definition: Ein B-Baum ist ein Baum mit Wurzel root[T ], der folgende Eigenschaften besitzt:
• Jeder Knoten x enthält folgende Informationen:
(a) die Anzahl n[x] der Schlüssel, die im Knoten x gespeichert werden
(b) die n[x] Schlüssel selbst, nicht absteigend sortiert:
key1 [x] ≤ key2 [x] ≤ · · · ≤ keyn[x] [x]
(c) eine boolsche Variable leaf [x], mit der Information, ob x ein Blatt ist
(d) n[x] + 1 Zeiger auf Nachfolgerknoten, wenn x kein Blatt ist.
• Die Schlüssel keyi [x] unterteilen die Bereiche der Schlüssel in den jeweiligen Unterbäumen:
ki ≤ keyi [x] und keyi [x] ≤ ki+1 für alle Knoten kj im j-ten Unterbaum und i = 1, . . . , n[x]
• Alle Blätter haben die selbe Tiefe – die Höhe des Baumes.
• Für ein festes t ∈ IN≥2 :
– Jeder Knoten außer der Wurzel muss mindestens t − 1 Schlüssel haben (d.h. mindestens
t Kinder). Die Wurzel hat mindestens einen Schlüssel.
– Jeder Knoten darf höchstens 2t − 1 Schlüssel haben (also höchstens 2t Kinder).
(a) Geben Sie ein Beispiel mit t = 2 und mindestens 10 Knoten an.
(b) Zeigen Sie, dass für einen B-Baum mit n ≥ 1 Knoten und t ≥ 2 gilt:
h ≤ logt
n+1
2
Aufgabe 3 (4 Punkte)
An der Uni Konstanz sollen die Datensätze der Studierenden in einer Hashtabelle verwaltet werden.
Als Schlüssel für einen Datensatz dient die Matrikelnummer m. Welche der folgenden Hashfunktionen halten Sie für gut geeignet bzw. nicht geeignet? Begründen Sie Ihre Meinung! Gehen Sie
dabei davon aus, dass die Matrikelnummern zufällige natürliche Zahlen kleiner 1.000.000 sind.
• h(m) = m
m
2

• h(m) =

falls m > 0
1
• h(m) = signum(m) = 0
falls m = 0


−1 falls m < 0
• h(m) = m mod 10
• h(m) = m mod 1021
√
• h(m) = m
• h(m) = die Quersumme von m
Aufgabe 4 (4 Punkte)
Es wird nach einer Methode gesucht, die schnell überprüft, ob kleine Zahlen prim sind:
Algorithmus KleinePrim
Eingabe: natürliche Zahl n zwischen 0 und 65
Ausgabe: Ist n eine Primzahl?
Gib A[h(n)] = n zurück
Dazu verwenden wir ein Array A der Größe 32 mit den Werten
(
n
falls n prim
A[h(n)] =
−1 sonst
Finden Sie eine effiziente Hash-Funktion h, die alle Primzahlen kleiner 65 kollisionsfrei in einem
Feld der Größe 32 unterbringt! Geben Sie dazu die Funktion als Funktionsvorschrift h : IN → IN
und eine Tabelle der Funktionswerte der Primzahlen. Schaffen Sie es auch mit den (ungeraden)
Primzahlen bis 100?
Effizient heißt in diesem Zusammenhang, dass nur ganze Zahlen addiert, subtrahiert und multipliziert werden dürfen, sowie ganzzahlige Divisionen durch Zweierpotenzen erlaubt sind.
Herunterladen