¢¡¤£¦¥¤§© ¤

Werbung
http://www.mpi-sb.mpg.de/~hannah/info5-ws00
IS
UN
R
S
WS 2000/2001
E R SIT
S
Bast, Schömer
SA
IV
A
Grundlagen zu
Datenstrukturen und Algorithmen
A VIE N
8. Übungsblatt
Abgabetermin: Dienstag, 19. Dezember 2000
Aufgabe 1 (10 + 15 + 20 Punkte)
Gegeben sei ein binärer Suchbaum B zur dynamischen Verwaltung einer Menge von n (paarweise verschiedenen) Elementen vom Typ T , auf dem eine Ordnung besteht. Die Speicherung
der Elemente erfolge knotenorientiert. In der Vorlesung wurde gezeigt, dass die Operationen
find, insert und erase in Zeit O(Tiefe(B)) ausgeführt werden können. Um zu garantieren, dass
Tiefe(B) = O(log n) ist, benutzt man nach dem Einfügen oder Löschen von Elementen oft Rotationen als Technik zur Rebalancierung. Realisieren Sie unter diesen Voraussetzungen folgende
zusätzlichen Operationen, indem Sie die Datenstruktur für B entsprechend ergänzen und/oder
die obigen Operationen modifizieren (deren Laufzeit dabei aber bei O(Tiefe(B)) bleiben sollte).
Ihre Vorgehensweise sollten Sie dabei ausführlich erklären und begründen.
(a) Zeigen Sie, wie sich die Operationen minimum und maximum in konstanter Zeit realisieren
lassen.
(b) Zeigen Sie, wie sich die Operation select(int k) (finde das k-t kleinste Element) in
O(log n) Zeit realisieren lässt. Hinweis: Verwalten Sie in jedem Knoten v des Baumes geeignete Zusatzinformationen über den Unterbaum von v.
(c) Zeigen Sie, wie sich die Operation int find(T& a, T& b) (ermittelt die Zahl aller Elemente x in B, für die a ≤ x ≤ b) in O(log n) Zeit realisieren lässt. Realisieren Sie eine
entsprechende Operation, die eine Liste all dieser Elemente zurückgibt, und bestimmen Sie
die Größenordnung ihrer Laufzeit.
Aufgabe 2 (10 + 20 + 15 + 10 + 30∗ Punkte)
Als eine Anwendung von binären Suchbäumen betrachen wir folgendes Problem:
Gegeben sei eine Menge P von paarweise verschiedenen Punkten p1 , p2 , . . . , pn in der Ebene,
d.h. jeder Punkt besitzt eine x- und eine y-Koordinate: pi = (xi , yi ) für i = 1, . . . , n. Zu dieser
Menge können jederzeit Punkte hinzugefügt oder aus ihr gelöscht werden. Wie üblich bezeichnet
der Parameter n die aktuelle Problemgröße, wenn eine Operation ausgeführt wird. Wir wollen
eine Datenstruktur zur effizienten Verwaltung dieser Menge von Punkten entwickeln, so dass die
Operationen insert, erase und find unterstützt werden. Die Operation int find(float a,
float b, float c, float d) soll dabei die Zahl der Punkte ermitteln, die in dem Rechteck
liegen, dessen x-Intervall durch a und b und dessen y-Intervall durch c und d gegeben ist.
Als primäre Datenstruktur benutzen wir einen binären Suchbaum, in dem die x-Koordinaten der
Punkte verwaltet werden. Zusätzlich zur x-Koordinate verwalten wir in jedem Knoten v dieses
Baumes einen binären Suchbaum für die y-Koordinaten aller Punkte, deren x-Koordinaten im
Unterbaum von v gespeichert sind; diese Bäume (einer pro Knoten im primären Baum) nennen
wir die sekundäre Datenstruktur.
(a) Schätzen Sie größenordungsmäßig den Platzbedarf für die gesamte Datenstruktur ab.
(b) Zeigen Sie, wie sich die Operationen insert und erase in Zeit O(log2 n) realisieren lassen.
(c) Zeigen Sie, wie sich die Operation find in Zeit O(log2 n) realisieren lässt.
(d) Erklären Sie, warum man in dem sekundären Suchbaum eines Knotens v nicht einfacher (und
platzsparender) die y-Koordinaten aller Punkte mit der an v gespeicherten x-Koordinate
verwaltet (anstatt, wie oben beschrieben, auch die y-Koordinaten aller Punkte deren xKoordinaten unterhalb von v gespeichert sind).
(e) Erklären Sie, wie sich die Problemstellung auf höhere Dimensionen (z.B. Punkte im Raum)
verallgemeinern lässt, wie man dann die Datenstruktur erweitern muss, und mit welchem
Platzbedarf und mit welchen Laufzeiten man dann für die verschieden Operationen rechnen
muss.
Herunterladen