Lernziele
Persistente Wörterbücher (Klassen p_dictionary und
pp_dictionary) |
Zweidimensionale Maps (Klasse
map2) |
LEDA bietet noch zwei Klassen für persistente Wörterbücher
an, die Klassen p_dictionary und
pp_dictionary. Das sind Wörterbücher, die
ihre „Entstehungsgeschichte“ nicht vergessen, so dass
zu einem beliebigen Zeitpunkt auf einen älteren Zustand des
Wörterbuches zurückgegriffen werden kann.
Bei p_dictionary führt ein Einfügen
oder Löschen eines Schlüssel-Wert-Paares dazu, dass ein neues
Wörterbuch entsteht, das die Änderung enthält; das alte Wörterbuch
ist unverändert und wird von der Operation zurückgeliefert. Es
kann dann in einer Zuweisung der Form
D_old = D.insert(k,v);
aufgefangen werden und steht weiter zur Verfügung. Diese Zuweisung
benötigt gegenüber gewöhnlichen Wörterbüchern nur konstante Zeit, weil
keine tiefe Kopie im Sinne der LEDA-Regel „Kopie eines Wertes“ durchgeführt
wird. Selbst wenn D nun verändert wird, ändert sich
D_old nicht, und dennoch ist die Implementierung dieses
Datentyps so effizient, dass Such- und Änderungsoperationen sehr schnell
sind. Diese Struktur wird z. B. im LEDA-Typ planar
subdivison benutzt.
Bei einem pp_dictionary darf nur das
zuletzt erzeugte Wörterbuch verändert werden,
auf alle vorherigen kann nur noch suchend zugegriffen werden. Ein
solches Wörterbuch wird als partiell
persistent bezeichnet. Der Hauptvorteil eines
pp_dictionary gegenüber einem
p_dictionary liegt darin, dass aufgrund der
Einschränkung, nur das jüngste Wörterbuch verändern zu können, eine noch schnellere Implementierung der
Such- und Änderungsoperationen möglich ist.
Weitere Informationen zu diesen beiden Klassen finden sich
auf den entsprechenden Manualseiten zu p_dictionary
bzw. pp_dictionary.
Alle in diesem Kapitel vorgestellten Containertypen sind eindimensional in dem Sinne, dass die Schlüssel aus einem eindimensionalen Universum stammen müssen, und nicht etwa Paare von Schlüsseln sein können, dass also die Schlüsselmenge kein Kreuzprodukt zweier Teilschlüsselmengen sein darf. Anders ausgedrückt: Der Schlüssel besteht immer nur aus einer Komponente.
Als Erweiterung des eindimensionalen Containertyps Map auf zweidimensionale
Schlüsselmengen gibt es in LEDA die Klasse map2. In dieser
Struktur kann zu einem Paar (s1,s2) aus
zwei Komponenten von Teilschlüsseln s1 und
s2 ein Wert v gespeichert werden. Die Struktur verwaltet also
Container der Form (s1,s2,v), wobei über ein Paar (s1,s2) als
Gesamtschlüssel auf v zugegriffen werden kann.
Diese Klasse hat dieselbe Schnittstelle wie
map und dieselbe Implementierung durch
Hashing mit Verkettung und Tafelverdoppelung. Weitere
Informationen zu map2 finden sich auf der
entsprechenden Manualseite.