Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

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

Re: Wie verwalte ich so viele Daten?

  Alt 30. Apr 2008, 20:06
Ich würde sogar noch weiter gehen, und eine Hashmap verwenden. Hier ist eine.

Eine binäre Suche dauert doch etwas, wenn auch nicht viel, aber der Suchaufwand nimmt mit der Größe der Liste doch zu. Das passiert bei einer Hashmap nicht. Die Hashmap wächst dynamisch.

Bei der o.g. Hashmap (TIntegerDictionary) wird zu jedem 4-Byte Schlüssel eine Nutzerinformation (Pointer) gespeichert. So würde die Zählfunktion aussehen:
Delphi-Quellcode:
Procedure Count (aDict : TIntegerDictionary; aCardinal : TCardinal);
Var
  cnt : PInteger;

Begin
  If aDict.Find (aCardinal, Cnt) Then // Wenn schon in der dictionary
    Cnt^ := Cnt^ + 1 // ... Zähler erhöhen
  Else Begin
    new (Cnt); // Ansonsten neuen Zähler anlegen
    Cnt^:= 1; // Initalisieren
    aDict.Add (aCardinal, Cnt); // und ab in die dictionary
  End
End;
Das geht -wie schon erwähnt- sehr schnell, schneller gehts eigentlich nicht (ok, eine Skiplistei ist marginal schneller, wenn sie nicht zu groß wird).

Klitzekleiner Pferdefuß: Die Ergebnisse sind unsortiert, du musst sie am Schluss auslesen, in eine Liste packen und diese dann sortieren, aber das hättest Du bei einer Liste ja auch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat