Transcript Splay Trees

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