Splay Trees
Von Projdakov Benjamin
Inhalt
1. Binäre Suchbäume
2. Splay Trees
a. Self adjustment
b. Anwendungsbeispiel
c. Rotationen
I. Zig / Zag
II. ZigZig/ZagZag
III. ZigZag/ZagZig
d. Operationen
I. Splay/Suche
II. Einfügen
III. Löschen
3. Amortisierte Analyse
a. Einführung/PotentialMethode
b. Hilfssatz
c. Definitionen
d. Zugrifslemma
I.
II.
III.
IV.
Zig/Zag
ZigZag/ZagZig
ZigZig/ZagZag
Splay
e. Satz 1: Splay-Baum
f. Satz 2: Binärer Baum
mit Splay
Binäre Suchbäume
Eigenschaften:
• Geordnete Menge von
Suchschlüsseln
• Linkes Kind der kleinere
Suchschlüssel
• Rechtes Kind der
größere Suchschlüssel
• Baum kann zu einer
linearen Liste ausarten
Splay Tree
• Splay-Bäume wurden 1985 von Daniel Sleator
und Robert Tarjan unter dem Namen SelfAdjusting Binary Search Trees vorgestellt
• Hat den Vorteil von Selbstjustierung
• Benutzt Rotationen für Knotenbewegung
• Typische Befehle auf Knoten:
– Suche
– Füge ein
– Lösche
Self adjustment
• Nach jeder Operation steht der bearbeitete
Knoten in der Wurzel.
• Die Tiefe eines Pfads halbiert sich im Schnitt
bei Ausführung einer Operation darauf.
• Oft benutzte Knoten sind näher an der
Wurzel.
Beispiel Compiler
Compiler:
• Ein Compiler muss die Variablen und andere Bezeichner eines
Programms verwalten.
• Er kann solche Information in einer Liste oder einer Tabelle
behalten.
• Gerne werden Variablen alphabetisch deklariert und ein
Baum entartet zu einer linearen Liste.
• Wenn einige Bezeichner häufiger verwendet werden, muss
man dann mehrmals nach diesen suchen.
• Ein Splay-Baum würde oft benutzte Variablen an der Wurzel
halten und ggf. die Liste zu einem Baum formen.
Rotation: Zig / Zag
Zig
Zag
Nur wenn 1 Schritt zur Wurzel.
Bei simpler Implementierung werden 2 Zeiger
„umgebogen“.
Rotation: ZigZig / ZagZag
ZigZig
ZagZag
Wenn mehr als 1 Schritt zur Wurzel.
Bei simpler Implementierung werden 4 Zeiger
„umgebogen“.
Rotation: ZigZag / ZigZag
Wenn mehr als 1 Schritt zur Wurzel.
Bei simpler Implementierung werden 4 Zeiger
„umgebogen“.
Operation: Splay
• Binäre Suche nach Element
• Falls Knoten nicht im Baum, wird der Vorgänger
betrachtet oder Nachfolger, wenn kleiner als alle.
• Bewegung des Elements in die Wurzel
Operationen: Suche
Suche:
• Einfach eine Splay-Operation mit Rückgabe
der neuen Wurzel.
• Laufzeit von einer Splay-Operation mit
Rückgabe der Wurzel.
Operation: Einfügen
Füge „x“ ein :
• Suche nach x, falls x gefunden => Splay x
• Falls x nicht gefunden, wird der Vorgänger y zur
Wurzel.
• Dann füge x als neue Wurzel ein, mit
– y linkem Kind von x
– rechtes Kind von y wird zum rechtem Kind von x.
Laufzeit von einer
Splay Operation
und umbiegen
von 3 Zeigern
Operation: Löschen
Lösche „x“:
• Splay x
• Wenn x nicht in der Wurzel, ist man fertig.
• Entferne x, man erhält nun 2 Bäume.
• Führe Splay ∞+ auf dem linken Baum aus.
• Somit linker Baum mit Wurzel, an die man rechts
den rechten Baum hängen kann.
Laufzeit von 2
SplayOperationen
und umbiegen
von einem
Zeiger
Amortisierte Analyse
• Analyse der durchschnittlichen Kosten von
Operationsfolgen.
• Es werden nicht die maximalen Kosten der
einzelnen Schritte betrachtet, sondern es wird
der Worst Case aller Operationen im
gesamten Durchlauf des Algorithmus
analysiert.
• Dies kann zu einer besseren oberen Schranke
führen.
Potential-Methode
•  =  +  − 
•  sind die amortisierten Kosten für die
Operation 
•  sind die tatsächlichen Kosten für die
Operation 
•  ist das Potential eines Zustands (ähnlich
zum Kontostand)
Amortisierte Analyse: Hilfsatz
a. Wenn: ,  > 0 ,  +  ≤ 
• Dann: log 2  + log 2  ≤ 2 log 2  − 2
• Denn: geometrisches Mittel ≤ arithmetisches Mittel
b.
 ≤
+
2
• log 2  + log 2  = log 2  ∗
Definition
Variablen:
• x : Schlüssel
• p : Knoten
• b : Baum
Rang von p:
•   = log 2   (min. Tiefe
bei Gewicht 1)
•   =   ,p hat Schlüssel
x
•


=


,
p
Wurzel
von
b
• Gewicht von x:   > 0
• Größe von p:   =
Potential von b:
∑ 
(Summe der Gewichte aller •   = ∑  , p ist innerer
Knoten von b
Schlüssel vom Teilbaum mit
Wurzel p)
(Summe aller Ränge der
inneren Knoten)
Zugriffslemma
Jede Splay-Operation hat als amortisierte Laufzeit maximal:
3   −  +1
Das ist nun zu zeigen.
Variablen:
• x : Schlüssel
• p : Knoten
• b : Baum
Rang:
•   = log 2  
•   =   ,p hat Schlüssel x
•   =   , p Wurzel von b
Zugriffslemma : Zig / Zag
Regeln:
1:  ′  =   =  
2:  ′  ≥ ′ )
3:  ′  ≥  )
Zugriffslemma : Zig / Zag
 = 1 +
′ ) −
  
′
′
 )
  
=1+  +  −  − 
=1 1 +  ′  −  
≤2 1 +  ′  −  
≤3 1 + 3  ′  −  
=1 1 + 3   −   )
 =  +  − 
  = log 2  
  = ∑ 
wegen Aufhebung der
nicht bewegten Knoten
1:  ′  =   =  
2:  ′  ≥  ′ 
3:  ′  ≥  )
Zugriffslemma : ZigZag / ZagZig
Regeln:
1:  ′  =  
2:   ≥  )
3:  ′  +  ′  ≤ 2 ′  − 2 ,da
log 2  ′  + log 2  ′  ≤ 2 log 2  ′  − 2
4:  ′  ≥  )
Zugriffslemma : ZigZag / ZagZig
 = 2 +  ′  +  ′  +  ′  −   −   −  )
=1 2 +  ′  +  ′  −   −  )
≤2 2 +  ′  +  ′  −   −  )
≤3 2 + 2 ′  − 2 −   −  )
= 2 ′  −   )
≤4 3  ′  −   + 1
≤3   −  )+1
 =  +  − 
  = log 2  
  = ∑ 
1:  ′ 
2:  
3:  ′ 
4:  ′ 
= 
≥  )
+  ′  ≤ 2 ′  − 2
≥  )
Zugriffslemma : ZigZig / ZagZag
Regeln:
3:   +  ′  ≤ 2 ′  − 2
1:  ′  =  
2:   ≥  ) ,  ′  ≥
′ )
Zugriffslemma : ZigZig / ZagZag
 = 2 +  ′  +  ′  +  ′  −   −   −  )
=1 2 +  ′  +  ′  −   −  )
≤2 2 +  ′  +  ′  −   −  )
= 2 + ′  + ′  −   −   +   −  
|+0
≤3 2 +  ′  + 2′  − 2 − 3 )
= 3 ′  −   )
≤3   −  +1
 =  +  − 
  = log 2  
  = ∑ 
1:  ′  =  
2:   ≥  ) ,  ′  ≥  ′ 
3:   +  ′  ≤ 2 ′  − 2
Zugriffslemma : Splay
 ≤
3 
1
 −
0

+
3 
2
 −
1

+
3 
3
 −
2

+
3 

=3 
⋮
 −

−1

+1
0

+1
 −
= 3   −  

Splay ist eine Folge von vorgestellten
Operationen.
+1
 = Rang von  nach -ter Operation
Rang von  vor Splay ist Rang des
gesuchten Schlüssels  vor Splay.
Rang von  nach Splay ist Rang des
Baumes.
Satz 1 : Splay Baum
• Für einen anfangs leeren Baum benötigt das
Ausführen von m Wörterbuchoperationen mit
höchsten N Einfügeoperationen maximal O(m log N).
• Wörterbuchoperationen brauchen eine konstante
Anzahl von Splay-Operationen + eine konstante
Anzahl Einzeloperationen.
• Für diesen Beweis setzen wir alle Gewichte auf 1 .
Beweis
 ≤ 3   −  
≤ 3  + 1
= 3 log 2   + 1
= 3 log 2 ∑  
+1
≤ 3 log 2  + 1
⇒  ∈  log  )
⇒  
∈   log  )
+1
Zugriffslemma
  ≥0
Def. von 
Def. von 
Gesamtgewicht ≤ 
N = Anzahl der Einfügeoperationen
m = Anzahl von Operationen
  = log 2  
Größe :   = ∑ 
Satz 2 : Binärer Baum mit Splay
• Für einen binären Suchbaum mit N Knoten, haben m
Suchoperationen (über Splay) einen Aufwand von
maximal O((N + m) log (N) + m).
• Eine Suchoperation besteht aus einer Splay-Operation
und Rückgabe des neuen Wurzelknotens.
• Für diesen Beweis setzen wir alle Gewichte auf 1.
• Wir suchen die tatsächlichen Kosten über:
 =  +  − 
Potentialdifferenz
 −  =
  −
∈
=
  −
 
′ 
∈
 =    
 =    
 =  ,  = 
Erweitere um Blätter (Rang 0, Gewicht 1), somit alle p‘s in
beiden Summen
′ 
 
  − ′ 
=
 
=
Benutze Definitionen:
log 2   ) − log 2
′
 )
•
•
  = log 2  
  = ∑  ( im Teilbaum von )
 
≤
log 2  − log 2   ))
 
=
log 2  =  log 2 
 
= Summe aller Gewichte:  ) (Anzahl von Knoten = )
 ≥   , ∀ ∈ 
  = 1, ℎ  ℎü  
log  1 = 0
Abschätzung von Suchfolgen

=
 =
=1

=

 +−1 −  )
Def. von amortisierten
Kosten.
=1
Treppensumme
 ) + 0 − 
=1

≤
3   − 
+ 1) + 0 − 
=1

≤
3 ) + 1) + 0 − 
=1
≤  3log 2  + 1 +  log 2 
= 3 +  log 2  + 
∈   +  log 2  + )
Zugriffslemma
  ≥ 0, somit Wegfall
Definition Rang und
Potentialdifferenz