Seminar über Algorithmen DozentInnen: Helmut Alt, Claudia Klost Randomisierte Datenstrukturen Ralph Schäfermeier 13. 2. 2007 Das Verwalten von Mengen, so dass ein schneller Zugriff auf deren Elemente gewährleistet werden kann, ist ein fundamentales Problem der Informatik. Betrachte die total geordnete Menge U. Seien S1, S2, ... disjunkte endliche Teilmengen von U, und jedes i aus einer dieser Teilmengen indiziert durch einen eindeutigen Schlüssel k(i) ∈ K. K ist total geordnete Menge. Definiert sind folgende Operationen: MAKESET (S): Erzeuge neue (leere) Menge S. INSERT (i, S): Füge Element i in S ein. DELETE (k, S): Lösche Element mit Schlüsselwert k aus S. FIND (k, S): Suche Element mit Schlüsselwert k in S. JOIN (S1, i, S2): Ersetze S1 und S2 durch die neue Menge, wobei f. a. j ∈ S1: k(j) < k(i), f. a. j ∈ S2: k(j) > k(i). PASTE (S1, S2): Ersetze S1 und S2 durch die neue Menge S = S1 S2, wobei f. a. i ∈ S1 und j ∈ S2: k(i) < k(j). SPLIT (k, S): Ersetze S durch die neuen Mengen S1 und S2: S1 = {j ∈ S | k(j) < k}, S2 = {j ∈ S | k(j) < k}. Eine Standardlösung des Problems bieten Binäre Suchbäume. Dabei sind die Laufzeiten von INSERT, DELETE, FIND, SPLIT und PASTE proportional zur Höhe h des Baums. Bei ungeeigneter Einfügereihenfolge entartet der Baum zu einer Verketteten Liste, in diesem Fall ist die Laufzeit dieser Operationen in O(n). Ein deterministischer Ansatz, die Höhe auf O(log n) zu beschränken, ist die Balancierung des Baums nach einer Einfügeoperation. Random Treaps Definition 1: Ein Treap T(S) (angeleitet von Tree und Heap) ist ein binärer Baum. Jeder Knoten v enthält ein i ∈ S, dem ein Schlüsselwert k(i) und eine Priorität p(i) zugeordnet werden. Bezüglich der Schlüsselwerte erfüllt T die Suchbaumeigenschaft, und bezüglich der Prioritäten die Heap-Eigenschaft. 7, 30 4, 26 2, 13 6, 19 11, 27 9, 14 12, 22 Satz 1: Sei S = {(k1, p1), ..., (kn, pn)} beliebige Menge aus Schlüssel-Prioritäten-Paaren. Seien alle ki i ∈ {1,..., n} einander verschieden. Seien alle pi i ∈ {1,..., n} einander verschieden. Dann existiert für S ein eindeutiger Treap T(S ). Bei einem Random Treap wird die Priorität für jedes Element zufällig aus einem festen Intervall [a,b] gewählt. Die Wahrscheinlichkeiten für alle Prioritäten aus [a,b] sind gleichverteilt. Jede Priorität wird nur einmal ausgewählt. Mulmuley Games Teilnehmer: = {P1, ..., Pp} (Players) = {S1, ..., Ss} (Stoppers) = {T1, ..., Tt} (Triggers) = {B1, ..., Bb} (Bystanders) ∪ sei endliche Teilmenge einer total geordneten Grundmenge. Für alle i,j, 1 ≤ i ≤ ||, 1 ≤ j ≤ ||:Pi < Sj (bezüglich dieser Ordnung). , , , seien paarweise disjunkt. Spiel A: Zufälliges Ziehen ohne Zurücklegen aus X = ∪ B, bis X leer ist. V = Anzahl der Ziehungen, in denen ein Spieler Pi größer ist als alle bisher gezogenen Spieler. Wert von Spiel A: Ap:= E[V], A0 := 0. Lemma 1: Für alle p ≥ 0: Ap = Hp. Spiel D: X = ∪ T ∪ B. Wie Spiel A, ein Spieler P zählt jedoch erst, nachdem der erste Trigger T gezogen wurde. Lemma 2: Für alle p, t ≥ 0: Dpt = Hp + Ht - Hp+t. Laufzeitanalyse von Treaps Wegen Lemma 1 können wir o.B.d.A. annehmen, dass die Elemente in der Reihenfolge ihrer Prioritäten eingefügt werden. In diesem Fall sind keine Rotationen nötig. Unter dieser Annahme können wir mit Hilfe von Mulmuley Game A folgendes zeigen: Satz 2: Sei T(S) ein Random Treap der Größe n. Sei x ∈ S das k-größte Element in S. Dann ist die erwartete Tiefe von x in T: E[t(x)] = Hk + Hn-k+1 + 1 = O(log n). Suchoperationen sind somit in ihrer erwarteten Laufzeit durch O(log n) beschränkt. Mit Hilfe von Mulmuley Game D lässt sich die erwartete Anzahl von Rotationen beim Einfügen und Löschen beschränken: Satz 3: Sei T(S) ein Random Treap der Größe n. Sei x ∈ S das k-größte Element in S. Dann ist die erwartete Anzahl von Rotationen beim Einfügen (Löschen) von x in (aus) T: E [ r x]=1 - 1 1 + 1k n- k +1 Es folgt also, dass auch die erwartete Laufzeit der Update-Operationen auf einem Random Treap durch O(log n) beschränkt sind. Random Skip Lists Eine weitere Lösung des Problems der Verwaltung von Mengen stellen Skiplisten dar. L6 L5 L4 L3 L2 -∞ 1 2 3 4 5 +∞ L1 Definition 2: Ein Leveling mit r Ebenen einer geordneten Menge S ist eine Folge verschachtelter Teilmengen von S (S ist Teilmenge einer total geordneten Grundmenge U). Lr ⊆ Lr-1 ⊆ ... ⊆ L2 ⊆ L1, so dass Lr = Ø und L1 = S. Bei einer randomisierten Skipliste S wird das Leveling wie folgt bestimmt: Alle Elemente sind in Ebene 1 vorhanden, das Übernehmen in die nächsthöhere Ebene geschieht für jedes Element zufällig mit der Wahrscheinlichkeit p = ½. D.h. l(x) für x ∈ S ist eine unabhängige, geometrisch verteilte Zufallsvariable mit p = 1/2. Lemma 3: Für alle α > 1 gilt: Die Anzahl der Ebenen r in einer randomisierten Skipliste S mit |S| = n ist mit großer Wahrscheinlichkeit r = O(log n). Es lässt sich zeigen, dass Pr [r log n] ≤ 1 n −1 für alle 1 Laufzeitanalyse von Skiplisten FIND: Stellt man die Skipliste als Baum dar, wobei jeder Knoten das Intervall ist, dass von zwei benachbarten Elementen überspannt wird, so lässt stellt man fest, dass die FIND-Operation maximal die Kinder eines Knotens I in Ebene j traversiert, um Ebene in die ebene j-1 zu gelangen. Die Laufzeit von FIND ist also beschränkt durch ∑ r O i =1 1c I j y . Da die Anzahl der Geschwister eines Knotens einer geometrischen Verteilung mit p = ½ unterliegt, lässt sich zeigen, dass die erwartete Anzahl von Kindern eines Knotens in Ebene I E[c(I)] ≤ 2 für alle I ∈ S. Daraus und aus der Beschränkung der Anzahl der Ebenen mit großer Wahrscheinlichkeit folgt: r ∑ 1c I j y =O log n mit großer Wahrscheinlichkeit. i=1 Die Operationen INSERT und DELETE müssen zunächst das Element bzw. dessen Platz in der Liste finden. Die anschließend notwendigen Operationen zum Aufspalten bzw. Zusammenziehen des Intervalls um sie herum geschieht in O(l(y)). Die Kosten für INSERT und DELETE sind also auch beschränkt durch O(log n) (mit großer Wahrscheinlichkeit).