AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Skiplist

Ein Thema von alzaimar · begonnen am 8. Mai 2005
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Skiplist

  Alt 8. Mai 2005, 16:36
Ich brauchte mal eine schnelle sortierte Liste. AVL-Bäume waren zu komplex und wegen des Overheads beim ausbalancieren nicht geeignet. Eine Hash-Tabelle kam auch nicht in Frage, weil die Elemente sortiert ausgegeben werden mussten. Und eine Liste erstellen, um sie zu sortieren, kam auch nicht in Frage, weil es ja *schnell* gehen muss.

Ich stiess auf die SkipList, eine echte Höllenmaschine. Die Theorie hinter dem Verfahren ist pervers, das Teil selbst einfach genial.

Hier eine Version, die zu Int64-Schlüsseln einen Pointer abspeichert.
Über List.Insert (Key, Data) fügt man ein Element ein, mit List.Delete (Key) wird es wieder gelöscht, mit List.Find (Key, Info): Boolean sucht man einen Eintrag. Wem das noch zu komplex ist, der kann es auch mit List.Contains (Key) : Boolean noch einfacher bekommen. Weiterhin kann man mit List.First zum ersten und mit List.Next zum nächsten Element springen, mit CurrentData(Key, Data) die aktuellen Daten auslesen, bis die Funktion List.EndOfList den Wert True liefert.

Der optionale Parameter aMaxLevel im Konstruktor dient Testzwecken und kann weggelassen werden.

Vergleicht doch mal die Performance. Den Code habe ich vom Originalmanuskript des Verfassers in Delphi übersetzt. Man kann ihn natürlich noch verbessern. Interessant ist der Randomgenerator, der die Zufallszahlen genau in der Verteilung liefert, die das Verfahren benötigt.

Viel Spass.
Angehängte Dateien
Dateityp: pas csskiplists_200.pas (6,5 KB, 220x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz