310 likes | 505 Views
Splay Trees. Von Projdakov Benjamin. Inhalt. Binäre Suchbäume Splay Trees Self adjustment Anwendungsbeispiel Rotationen Zig / Zag ZigZig/ZagZag ZigZag/ZagZig Operationen Splay/Suche Einfügen Löschen Amortisierte Analyse Einführung/Potential- Methode Hilfssatz Definitionen
E N D
Splay Trees Von Projdakov Benjamin
Inhalt • Binäre Suchbäume • Splay Trees • Self adjustment • Anwendungsbeispiel • Rotationen • Zig / Zag • ZigZig/ZagZag • ZigZag/ZagZig • Operationen • Splay/Suche • Einfügen • Löschen • Amortisierte Analyse • Einführung/Potential- Methode • Hilfssatz • Definitionen • Zugrifslemma • Zig/Zag • ZigZag/ZagZig • ZigZig/ZagZag • Splay • Satz 1: Splay-Baum • 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 Self-Adjusting 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 Nur wenn 1 Schritt zur Wurzel. Bei simpler Implementierung werden 2 Zeiger „umgebogen“. Zag
Rotation: ZigZig / ZagZag ZigZig Wenn mehr als 1 Schritt zur Wurzel. Bei simpler Implementierung werden 4 Zeiger „umgebogen“. ZagZag
Rotation: ZigZag / ZigZag Wenn mehr als 1 Schritt zur Wurzel. Bei simpler Implementierung werden 4 Zeiger „umgebogen“. ZigZag ZagZig
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 Laufzeit von 2 Splay-Operationen und umbiegen von einem Zeiger 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.
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 • Wenn: • Dann: • Denn: geometrisches Mittel arithmetisches Mittel b. • =
Definition Variablen: • x : Schlüssel • p : Knoten • b : Baum • Gewicht von x: • Größe von p: (Summe der Gewichte aller Schlüssel vom Teilbaum mit Wurzel p) Rang von p: • (min. Tiefe bei Gewicht 1) • ,p hat Schlüssel x • , p Wurzel von b Potential von b: • , p ist innerer Knoten von b (Summe aller Ränge der inneren Knoten)
Zugriffslemma Jede Splay-Operation hat als amortisierte Laufzeit maximal: Das ist nun zu zeigen. Rang: • ,p hat Schlüssel x • , p Wurzel von b Variablen: • x : Schlüssel • p : Knoten • b : Baum
Zugriffslemma : Zig / Zag Regeln: 1: 2: 3:
Zugriffslemma : Zig / Zag wegen Aufhebung der nicht bewegten Knoten 1: 2: 3:
Zugriffslemma : ZigZag / ZagZig Regeln: 1: 2: 3: ,da 4:
Zugriffslemma : ZigZag / ZagZig 1: 2: 3: 4:
Zugriffslemma : ZigZig / ZagZag Regeln: 1: 2: , 3:
Zugriffslemma : ZigZig / ZagZag 1: 2: , 3:
Zugriffslemma : Splay Splay ist eine Folge von vorgestellten Operationen. Rang von vor Splay ist Rang des gesuchten Schlüssels vor Splay. Rang von nach Splay ist Rang des Baumes. Rang von nach -ter Operation
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 Zugriffslemma Def. von Def. von Gesamtgewicht N = Anzahl der Einfügeoperationen m = Anzahl von Operationen 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: • ( im Teilbaum von ) = Summe aller Gewichte: (Anzahl von Knoten = )
Abschätzung von Suchfolgen Def. von amortisierten Kosten. Treppensumme Zugriffslemma , somit Wegfall Definition Rang und Potentialdifferenz