Rolf B: Zeiger Wettrennen

Beitrag lesen

Hallo pl,

man kann mit Hilfe von Indextabellen auch anders vorgehen. Ob es sinnvoll ist, hängt vom Anwendungsfall ab.

Beispiel mit einer winzigen Liste. Denk Dir technische Details wie Längenfelder dazu.

0....:....1....:....2....:....3....:....4....:....5....:....6....:....7
alma,alpha,beta,charlie,foxi,foxtrott,martin,marzipan,selfhtml,troubadix

Dazu könnte man nun eine Indexliste anlegen:

alma -> 0
charlie -> 16
marzipan -> 45

Wenn Du nun nach fox* suchst, dann suchst zu zuerst in der Indexliste und machst 3 Prüfungen, bis Du "marzipan" findest und demzufolge weißt, dass Du im Bereich 16-44 suchen musst. Nur diesen Teil musst Du jetzt noch aus der Datei laden. Weiter geht's dort, und du machst 4 Prüfungen, bis Du bei "martin" ankommst und fertig bist. 8 Prüfungen. Im kleinen Beispiel ist der Gewinn 0, aber wenn Du bspw. 5000 Einträge hast und im Index jeden 50-ten Eintrag einträgst, reduzierst Du durchschnittlich 2500 Prüfungen auf 50+25 (bzw. maximal 5000 auf 150). Du musst beim Erstellen des Index nur aufpassen, dass an den Übergängen das erste Zeichen des Schlüssels wechselt, sonst könnte foxtrott im Index stehen und foxi steht auf der Seite davor. Oder Du musst sicherheitshalber die Seite davor mit durchsuchen, das wird dann lästig.

Das kann man auch mit mehr als 2 Stufen tun (also bei einer großen Indexliste nochmal einen Index drüberlegen), das Ergebnis ist eine ISAM Datei.

Rolf

--
sumpsi - posui - clusi