Fun with binary heap trees


... [Seminar "Haskell"] ... [Inhaltsübersicht] ... [zurück] ... [weiter] ...

Persistence


Was ist Persistence

Unter Persistence versteht man ein Konzept, bei dem Änderungen an einer komplexen Datenstruktur nicht unwiederbringliche Äbänderung dieser bedeutet. Es werden lediglich die Elemente, die sich im Vergleich zum alten Zustand geändert haben neu erzeugt. Es werden allerdings alle unveränderten Elemten in die neue Struktur mit eingebaut.
Beim Einfügen des Elementes 7 in den Baum links werden lediglich die Elemente, die sich rechts neben dem Baum befinden neu erzeugt, wobei die 1 zusätzlich eine Referenz auf die 2 und die 4 eine auf die 8 hat. Damit kann man über die linke 1 auf den alten Baum zugreifen und über die rechte 1 auf den neuen Baum.

     1      1
   /   \     \
  2     4     4
 / \   /       \
6   3 8         7
   /
  5



Vorteile

Durch dieses Verfahren behält man die Möglichkeit, trotz Änderungen immer wieder auf eine alte Version des Baumes zugreifen zu können. Dadurch werden Undo- oder Rollback-Funktionalitäten extrem einfach. Ausserdem spart man hierbei im Gegensatz zu einer kompletten Kopie des Baumes Speicherplatz. Zu guter Letzt spart man aber auch Laufzeit, da nur die Teile neu erzeugt werden müssen, die sich auch wirklich geändert haben.
Wenn man dieses Verfahren in implizite Sprachen umsetzt, sollte man sich darüber im Klaren sein, dass ein willkürliche Wertänderung eines der Elemente des Baumes (ohne Erzeugung eines neuen persistenten Baumes) Auswirkungen auf andere Versionen des Baumes haben kann (Seiteneffekte). Unter Haskell kann dies jedoch nicht passieren, da nachträgliche Wertänderungen nicht möglich sind.