3.7. Was wir nicht beschrieben haben

Lernziele

Persistente Wörterbücher (Klassen p_dictionary und pp_dictionary)
Zweidimensionale Maps (Klasse map2)

Persistente Wörterbücher

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 von LEDA-Regel 9 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.

Zweidimensionale Maps

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.