<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Splay-Baum</id>
	<title>Splay-Baum - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Splay-Baum"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Splay-Baum&amp;action=history"/>
	<updated>2026-06-07T14:13:58Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Splay-Baum&amp;diff=749512&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Splay-Baum&amp;diff=749512&amp;oldid=prev"/>
		<updated>2025-09-22T08:16:25Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In der Informatik ist ein &amp;#039;&amp;#039;&amp;#039;Splay-Baum&amp;#039;&amp;#039;&amp;#039; (auch Spreizbaum genannt, englisch &amp;#039;&amp;#039;splay tree&amp;#039;&amp;#039;) ein spezieller Typ eines [[binärer Suchbaum|binären Suchbaums]]. Der Splay-Baum ist eine selbst-organisierende [[Datenstruktur]] mit der Besonderheit, dass die Organisation der gespeicherten Elemente sich potentiell nicht nur bei Modifikationen (wie bei [[AVL-Baum]] und [[Rot-Schwarz-Baum]]) ändert, sondern auch bei bloßen Anfragen. Die angefragten Elemente werden in die Nähe der [[Gewurzelter Baum|Wurzel]] „gespült“, so dass sie bei einer alsbaldigen erneuten Suche schneller gefunden werden. Alle wichtigen Operationen wie &amp;#039;&amp;#039;Einfügen&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Suchen&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Löschen&amp;#039;&amp;#039; werden ([[Amortisierte Laufzeitanalyse|amortisiert]]) effizient ausgeführt. Für eine gegebene Anfragesequenz verhält sich der Splay-Baum bezüglich der asymptotischen Laufzeit aller Anfragen äquivalent zu einer optimalen statischen Datenstruktur für diese Sequenz.&amp;lt;ref name=&amp;quot;SleatorTarjan&amp;quot;&amp;gt;{{Literatur |Autor=Daniel D. Sleator, [[Robert E. Tarjan|Robert Tarjan]] |Titel=Self-Adjusting Binary Search Trees |Sammelwerk=Journal of the ACM ([[Association for Computing Machinery]]) |Band=32 |Nummer=3 |Datum=1985 |Seiten=652–686 |Online=https://www.cs.cmu.edu/~sleator/papers/self-adjusting.pdf |Format=PDF |KBytes=6100 |DOI=10.1145/3828.3835}}&amp;lt;/ref&amp;gt; Diese Eigenschaft bezeichnet man als „statische Optimalität“. Es wird vermutet, dass die asymptotische Laufzeit der Anfragesequenz auch äquivalent zu der einer optimalen &amp;#039;&amp;#039;dynamischen&amp;#039;&amp;#039; Datenstruktur ist. Diese Vermutung ist als „dynamische Optimalität“ bekannt und gilt als eines der bekanntesten offenen Probleme auf dem Gebiet der Datenstrukturen.&lt;br /&gt;
&lt;br /&gt;
Splay-Bäume wurden 1985 von [[Daniel Sleator]] und [[Robert Tarjan]] unter dem Namen &amp;#039;&amp;#039;Self-Adjusting Binary Search Trees&amp;#039;&amp;#039; vorgestellt.&amp;lt;ref name=&amp;quot;SleatorTarjan&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operationen ==&lt;br /&gt;
&lt;br /&gt;
Splay-Bäume haben gegenüber normalen Bäumen eine besondere Operation &amp;#039;&amp;#039;splay&amp;#039;&amp;#039;, mittels welcher alle anderen Operationen sehr leicht durchgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
=== Splay ===&lt;br /&gt;
&lt;br /&gt;
Wird die Splay-Operation auf ein Element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in einem Baum &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; angewendet, so sorgt sie dafür, dass &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; nach der Operation in der Wurzel von &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; steht. Dies wird erreicht, indem das Element Schritt für Schritt im Baum hinaufrotiert wird, bis es schließlich bei der Wurzel angekommen ist. Hierzu wird &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jeweils mit seinem Vater bzw. Großvater verglichen. Aufgrund dieses Vergleiches werden insgesamt sechs Fälle unterschieden, die jeweils paarweise symmetrisch sind.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Anmerkung:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;Rotationen&amp;#039;&amp;#039; sind im Artikel [[Binärbaum#Rotation in binären Bäumen|Binärbaum]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zick-Rotation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; das linke Kind seines Vaters ist und keinen Großvater hat, und somit bereits direkt unter der Wurzel steht, wird eine &amp;#039;&amp;#039;&amp;#039;zick&amp;#039;&amp;#039;&amp;#039;-Rotation (Rechts-Rotation) durchgeführt. Nun ist &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; die neue Wurzel des Baumes und die Splay-Operation beendet. Liegt &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; im rechten Teilbaum seines Vaters, wird analog eine &amp;#039;&amp;#039;zack&amp;#039;&amp;#039;-Rotation (Links-Rotation) durchgeführt. Hat &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; einen Großvater, so können zwei Einzelrotationen zu einer Kompositrotation zusammengesetzt werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:splay tree zig.svg|center|340px]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zick-Zick-Rotation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ist &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; das linke Kind seines Vaters, welcher das linke Kind des Großvaters von &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; ist, so wird eine &amp;#039;&amp;#039;&amp;#039;zick-zick&amp;#039;&amp;#039;&amp;#039;-Rotation (zwei Rechts-Rotationen) durchgeführt. Hierbei wird &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; mit dem Großvater vertauscht und alle weiteren Unterbäume werden an die entsprechenden Stellen gesetzt. Falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; nach der Rotation noch nicht in der Wurzel des Baumes steht, so wird weiterrotiert. Symmetrisch hierzu die &amp;#039;&amp;#039;zack-zack&amp;#039;&amp;#039;-Rotation, falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; das rechte Kind seines Vaters ist, welcher das rechte Kind des Großvaters von &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
[[Datei:zigzig.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zack-Zick-Rotation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ist &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; das zweite Kind (von links) seines Großvaters, so wird eine &amp;#039;&amp;#039;&amp;#039;zack-zick&amp;#039;&amp;#039;&amp;#039;-Rotation (Links-Rotation gefolgt von einer Rechts-Rotation) durchgeführt. Hierbei tauscht &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; die Position mit seinem Großvater und alle weiteren Unterbäume werden an die entsprechenden Stellen gesetzt. Falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; nach der Rotation noch nicht in der Wurzel des Baumes steht, so wird weiterrotiert. Symmetrisch hierzu die &amp;#039;&amp;#039;zick-zack&amp;#039;&amp;#039;-Rotation, falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; das linke Kind seines Vaters ist, welcher das rechte Kind des Großvaters von &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
[[Datei:zigzag.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Suchen ===&lt;br /&gt;
&lt;br /&gt;
Um ein Element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; im Baum &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; zu suchen, führt man einfach &amp;lt;math&amp;gt;splay(x,T)&amp;lt;/math&amp;gt; aus. Dies bewirkt, dass, falls &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; enthalten war, es nun in der Wurzel steht. Somit muss man nur noch die neue Wurzel mit &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; vergleichen. Sind sie unterschiedlich, war &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; nicht im Baum.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einfügen ===&lt;br /&gt;
&lt;br /&gt;
Um ein Element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in einen Splay-Baum &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; einzufügen, sucht man zuerst wie in einem Binärbaum nach &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;. Nachdem diese Suche erfolglos endet, bekommt man den Knoten &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;, an dem &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; angehängt werden müsste. Dieser Knoten &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; wird jetzt mit der &amp;#039;&amp;#039;splay&amp;#039;&amp;#039;-Operation an die Wurzel gebracht. Somit ist &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; nun an der Wurzel und hat zwei Teilbäume &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt;. Jetzt wird die &amp;#039;&amp;#039;split&amp;#039;&amp;#039;-Operation ausgeführt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; wird mit &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; verglichen:&lt;br /&gt;
&lt;br /&gt;
:wenn &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; größer als &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;, dann wird &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; mit seinem linken Teilbaum &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; links an &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; angehängt. Der rechte Teilbaum &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt; wird rechts an &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; angehängt.&lt;br /&gt;
&lt;br /&gt;
:wenn &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; kleiner als &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;, dann wird &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; mit seinem rechten Teilbaum &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt; rechts an &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; angehängt. Der linke Teilbaum &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; wird links an &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; angehängt.&lt;br /&gt;
&lt;br /&gt;
Somit ist &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; an der Wurzel und an der richtigen Stelle.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Löschen ===&lt;br /&gt;
&lt;br /&gt;
Um &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; aus &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; zu löschen, führt man erst einmal eine Suche auf &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; aus, wird das Element gefunden, wird es gelöscht, und der Unterbaum an den Elternknoten &amp;lt;math&amp;gt;P(x)&amp;lt;/math&amp;gt; angehängt. Gefolgt von &amp;lt;math&amp;gt;splay(P(x), T)&amp;lt;/math&amp;gt;, welches den Elternknoten in die Wurzel holt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vereinigen ===&lt;br /&gt;
&lt;br /&gt;
Die Operation &amp;#039;&amp;#039;join&amp;#039;&amp;#039; vereinigt zwei Splay-Bäume &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt;, welche unmittelbar vorher mittels &amp;#039;&amp;#039;split&amp;#039;&amp;#039; getrennt wurden. Hierbei wird zuerst mittels &amp;lt;math&amp;gt;splay(\infty,T_1)&amp;lt;/math&amp;gt; das maximale Element &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; des ersten Baumes gesucht und in die Wurzel rotiert. Da die beiden Bäume &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt; das Ergebnis einer vorherigen &amp;#039;&amp;#039;split&amp;#039;&amp;#039;-Operation sind, sind alle Elemente in &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt; größer als die Elemente in &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt;, weswegen man den Baum &amp;lt;math&amp;gt;T_2&amp;lt;/math&amp;gt; nun ohne Probleme zum rechten Kind von &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; machen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufsplitten ===&lt;br /&gt;
&lt;br /&gt;
Um einen Splay-Baum &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; bei dem Knoten &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in zwei Splay-Bäume aufzusplitten, macht man zuerst &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; mittels &amp;#039;&amp;#039;splay&amp;#039;&amp;#039; zur Wurzel von &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. War &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; im Baum enthalten, kann man nun die Verbindung zu einem der beiden Teilbäume einfach trennen. Steht nach der Splay-Operation ein anderes Element &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; in der Wurzel, so war &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; selbst nicht in &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; enthalten. Ist &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; nun kleiner als &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, so kann man das linke Kind von &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; abschneiden, andernfalls sein rechtes.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Amortisierte Laufzeit:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.cs.usfca.edu/~galles/visualization/SplayTree.html Splay-Baum Visualisierung]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Suchbaum]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>