Soft Heaps - inf.fu

Werbung
Soft Heaps
Allgemein:
Soft Heaps sind Prioritätswarteschlangen.
Sie unterstützen folgende Operationen:
Create (S) erzeugt einen leeren Soft Heap
Insert (S,x) fügt x in den Soft Heap S ein
Meld (S, S’) verschmelzt die Soft Heaps S und S’ miteinander
Delete (S, x) löscht Element x aus dem Soft Heap S
Findmin(S) gibt das Element mit dem kleinsten Schlüssel zurück
Theorem 1.1:
Starte ohne alte Daten und betrachte einige gemischte Operationen, von denen
aber n Insert Operationen sind. Für alle є mit 0 < є <1/2 unterstützt ein Soft
Heap mit Fehlerrate є jede Operation in konstanter Laufzeit (amortisiert), außer
Insert, was O(log (1/є)) Zeit benötigt. Die Datenstruktur hat nie mehr als єn
verfälschte Elemente. In einem vergleichsbasierenden Modell ist diese Schranke
optimal.
Bemerkung:
Soft Heaps haben implizit Median-Finden Strukturen. Setze є auf eine kleine
Konstante und füge n Elemente ein und führe danach [n/2] Findmin
Operationen durch und lösche das minimale Element. Dazu benötigt man O (n)
Zeit.
Unter den gelöschten Schlüsseln ist der größte (originale) Schlüssel єn weit weg
vom Median der n original Schlüssel. Um solche Ergebnisse zu erhalten, braucht
man typischerweise eine Variante des Median-Finde Algorithmus von Blum.
Bemerkung:
Betrachte eine Sequenz von n „Insert“ Operationen in fallender Reihenfolge,
durchmischt mit n „Findmins“ und є = ½.
Trotz der hohen Fehlerrate liefern die „Findmins“ die aktuellen Minimums in
der halben Zeit zurück. Der Grund dafür ist, dass höchstens n/2 der eingefügten
Schlüssel verfälscht wurden. Wegen der fallenden Reihenfolge der Einfügens,
müssen die echten Schlüssel nach ihrem Einfügen von „Findmin“ gefunden
werden, falls sie zu diesem Zeitpunkt Minimum sind.
Theorem 2.1:
Für jedes 0<є< ½ kann man Soft Heaps nutzen zum Näherungssortieren von n
Zahlen in O(n log (1/є)) Zeit. Das bedeutet, dass die Stelle jeder Nummer in der
Ausgabe um maximal єn von ihrer richtigen Stelle entfernt ist.
3. Die Datenstruktur:
Als Vorbetrachtung schauen wir uns Binomialbäume vom Rang k an. Die haben
2k Knoten. Ein Soft Heap ist eine Sequenz von modifizierten Binomialbäumen
mit unterschiedlichen Rängen, genannt Soft Schlangen.
Modifikationen:
1. Eine Soft Schlange q ist ein Binomialbaum, bei dem Unterbäume fehlen
können. Der Binomialbaum, von dem q stammt heißt „Masterbaum“. Der Rang
eines Knotens von q ist die Anzahl der Kinder, des dazugehörigen Knotens im
„Masterbaum“.
Ranginvariante: Anzahl der Kinder der Wurzel ≥ [rang(Wurzel)/2] (abgerundet)
2. Ein Blatt v speichert mehrere Elemente, faktisch eine Elemente-Liste. Der
ckey von v bestimmt die Werte aller möglichen Schlüssel von Elementen aus
der Elemente-Liste. Es ist eine obere Schranke der original Schlüssel. Die Soft
Schlangen sind heap-geordnet nach den ckeys. Und wir definieren einen
Integerparameter r= r(ε) und vereinbaren, dass alle verfälschten Schlüssel in
einem Knoten vom Rang >r gespeichert werden.
Implementation:
Ein Knoten hat (vom Rang d)zwei Zeiger. Einen Zeiger NEXT und einen Zeiger
CHILD. Die sind entweder beide NULL oder aber, der Knoten ist Vater einer
Soft Schlange vom Rang d-1 (darauf verweist CHILD) und ist Wurzel einer Soft
Schlange vom Rank d-1 (darauf verweist NEXT).
Dann implementieren wir eine Kopfliste h1...hn. Diese Kopfliste ist eine
doppeltverkettete Liste. Jeder Kopf hi hat zwei Zeiger. Einer zeigt auf die
Wurzel ri einer Soft Schlange und der andere zeigt auf die Wurzel mit dem
kleinsten ckey aller rj’s (mit j ≥ i, genannt Suffix_Min Zeiger). Es ist klar, dass
rang(r1)<...<rang(rn). Der Rang einer Schlange ist abhängig vom Rang der
Wurzel und dieser Rang wird zusätzlich h gespeichert.
Verschmelzen einer Schlange vom Rang k mit einem Heap S:
Suche in S den kleinsten Index i, so dass rang (ri) ≥ k
1. Fall: Rang (ri) > k
Füge den Kopf rechts von hi für hi ein. (hi= hi+1)
2. Fall: Rang (ri) = k
Verschmelze die beiden Schlangen zu einer Schlange vom Rang
k+1, indem die Wurzel mit dem größeren ckey Kind der anderen
Wurzel wird.
Falls Rang (ri+1)= k+1, dann verschmelze die beiden Schlangen. Setze das fort,
bis kein Konflikt mehr da ist.
4.3 „Deletemin“:
Der Suffix_Min Zeiger am Anfang der Kopfliste zeigt auf das h mit dem
kleinste Element. Das Problem ist, dass die Elemente-Liste dieses Knotens leer
sein kann. In diesem Fall muss die Elemente-Liste gefüllt werden, mit
Elementen die tiefer in der Schlange sind, auf den h zeigt. Dafür nutzen wir die
Funktion „sift“, welche die leere Elemente-Liste durch eine andere ersetzt. Falls
nötig machen wir diesen Prozess so lange, bis die Elemente-Liste der Wurzel
nicht leer ist.
„Sift“ ist das Herz der Soft Heaps.
Als Argument wird der Knoten v genommen und die „sift“ Funktion lässt die
Elemente den Baum Richtung Wurzel hochgehen.
Typischer Weise ist bei solchen Sachen nur ein einzelner rekursiver Aufruf in
der Prozedur und der berechnete Baum ist ein Pfad.
Der Trick ist, dass die Rekursion gelegentlich zweimal aufgerufen wird und der
Rekursionsbaum sich dann verzweigt. Diese einfache Modifikation führt dazu,
dass die Elemente-Liste auf dem Weg nach oben zusammenstoßen, was dadurch
gelöst wird, dass man sie dann verkettet.
1. Sift(v)
2. Elemente-List (v)Tleer
3. If v hat keine Kinder
4.
then setze ckey(v) auf ∞ und return
5. sift(vnext)
6. if ckey(vnext) > ckey (vchild)
7.
then tausche vnext und vchild
8. T T U Elemente-List (vnext);
9. If Schleifenbedingung ist erfüllt then gehe zu 5;
10. Elemente-List(v)T
Schleifenbedingung:
Das ist das, was Soft Heaps von einem Binomialbaum unterscheidet.
(i)
Das „gehe zu“ wurde noch nicht ausgeführt während dieses „sift“
Aufrufes.
(ii) Der Rang von v überschreitet die Schwelle r und Rang von v ist
entweder ungerade oder überschreitet den Rang des Ranghöchsten
Kindes von v um mind. 2
Anmerkungen:
Der Rang der Kopien ist um eins kleiner als das Original. (Kopien für Next
Zeiger).
Beim Verschmelzen von zwei Itemlisten, wird der ckey aktualisiert. Der größere
ckey wird neuer ckey des Knoten mit der neuen Itemliste.
5.1 Fehlerrate:
r := 2 + 2[log (1/ε)] (aufgerundet)
Lemma 5.1:
|Elemente-List(v)| ≤ max{1, 2[rang(v)/2] – r/2} (in [] wird aufgerundet)
Lemma 5.2:
Der Soft Heap hat zu jeder Zeit höchstens n/2r-3 verfälschte Elemente.
5.2 Die Laufzeit:
Es reicht „Meld“ und „sift“ zu betrachten, da alle anderen Operationen in
konstanter Zeit ablaufen.
„Meld“ geht in linearer Zeit.
„sift“ geht in O(rn) Zeit.
Herunterladen