Eine SkipList bietet die gleichen -Grenzen für die Suche wie ein ausgeglichener Baum mit dem Vorteil, dass kein Neuausgleich erforderlich ist. Da die SkipList mit zufälligen Münzwürfen erstellt wird, gelten diese Grenzen nur, solange die Struktur der SkipList ausreichend "ausgeglichen" ist. Insbesondere mit der Wahrscheinlichkeit für eine Konstante kann die ausgeglichene Struktur nach dem Einfügen eines Elements verloren gehen.
Angenommen, ich möchte eine Überspringliste als Speicher-Backend in einer Webanwendung verwenden, die möglicherweise für immer ausgeführt wird. Nach einer polynomiellen Anzahl von Operationen geht die ausgeglichene Struktur der SkipList sehr wahrscheinlich verloren.
Ist meine Argumentation richtig? Haben solche probabilistischen Such- / Speicherdatenstrukturen praktische Anwendungen und wenn ja, wie wird das oben genannte Problem vermieden?
Bearbeiten: Mir ist bekannt, dass es deterministische Varianten der SkipList gibt, deren Implementierung im Vergleich zur (klassischen) randomisierten SkipList viel komplizierter ist.
Antworten:
Ich glaube nicht, dass es eine polynomielle Wahrscheinlichkeit gibt, das Gleichgewicht zu verlieren. Nachdem Sie ein Element in eine Überspringliste eingefügt haben, erstellen Sie einen Turm mit Kopien darüber, indem Sie eine Münze werfen, bis sie auftaucht.
Sie haben also Ebenen mit immer weniger Elementen, wenn Sie oben ankommen. Da ein Turm eine Höhe mit einer Wahrscheinlichkeit von , gibt es ein Element in Höhe mit einer Wahrscheinlichkeit (Vereinigungsgrenze) von weniger als . Daher hat ein Element auf der Ebene eine Wahrscheinlichkeit von weniger als . Türme der Höhe haben eine subpolynomielle Wahrscheinlichkeit. Sei das maximale Niveau, dann haben wirk 2−k k n/2k clogn 1/nc ω(logn) M
Darüber hinaus auf Ebene gibt es Elemente mit sehr hohen Wahrscheinlichkeit, da dies die Summe ist unabhängige Zufallsvariablen und Sie können gebundenen Tschernows verwenden.n / 2 k nk n/2k n
Da Sie auch zeigen können, dass Sie nur eine konstante Anzahl von Schritten pro Ebene ausführen (mit sehr hoher Wahrscheinlichkeit!), Sind die Suchkosten logarithmisch.
Sie müssten also in der Tat sehr unglücklich sein, um eine unausgeglichene Liste zu erhalten. Beachten Sie, dass "Glück" hier unabhängig von Ihren Daten ist, anders als beispielsweise bei unausgeglichenen Suchbäumen. Münzwürfe in Überspringlisten sind immer zufällig.
Soweit ich weiß, sind Überspringlisten von großem praktischem Interesse, da sie relativ einfach als sperrfreie Suchstrukturen mit den offensichtlichen Vorteilen implementiert werden können. B-Bäume hingegen sind bei gleichzeitigen Zugriffen nur schwer performant zu machen.
quelle
Überspringlisten haben andere Eigenschaften, die sie in Situationen attraktiv machen können, in denen andere Vorgänge als nur Einfügen / Nachschlagen / Löschen verwendet werden.
Zum Beispiel haben Sprunglisten erwartete lokale Aktualisierungen, wenn der Änderungsort bekannt ist. Dies ist sicherlich in Worst-Case-Zeit mit bestimmten ausgeglichenen binären Suchbäumen möglich, aber die Implementierung dieser Strukturen ist in der Regel ziemlich kompliziert.O ( 1 )O(1) O(1)
Darüber hinaus waren Überspringlisten eine beliebte Methode, um gleichzeitige vergleichsbasierte Suchstrukturen zu implementieren. In der Vergangenheit haben ausgewogene Suchbäume bei hohen gleichzeitigen Konflikten nicht so gut funktioniert.
quelle