Splay Trees

Werbung
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
Herunterladen