Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
25. Apr 2012
Hallo,
ich wollte mit myrandom eben keine Zufallszahlen erzeugen, sondern Zahlen, die in der Hashtable alle an der selben Stelle landen.
Damit erzwinge ich im Beispiel 25 Mio -1 Kollisionen und die Erzeugung einer linearen Liste.
Du hattest doch mal vermutet, das bei der ersten Kollision der Fehler mit dem Zugriff auf Speicheradresse 0...01 erfolgt sein könnte.
Das kann man jetzt wohl...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
24. Apr 2012
Hallo,
man kann der Hash-table den Schlüssel und einen Zeiger auf irgendwelche Daten übergeben.
Da aber da ja nur Index in das Feld gebraucht wird, reicht es, den integer Index in einen Pointer zu casten.
Beim Auslesen wird der Pointer eben wieder in ein integer gecastet.
Das geht aber nur, solange die Daten maximal soviel Speicher wie der type Pointer brauchen, bei 32 Bit-Systemem 4 Byte==...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
24. Apr 2012
Hallo,
hier die Funktion bei Zeile 535:
Function TIntegerDictionary.FindHash(aKey : TDictIntType; Out h: Cardinal): Pointer;
Begin
h := HashFromInt(aKey) Mod fHashMod;
Result := fHashList;
While PIntHashEntry(Result) <> Nil Do
With PIntHashEntry(Result)^ Do
If heKey = aKey Then
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
24. Apr 2012
Hallo,
ich bekomme den Fehler auch nicht hin :-(
Ich habe mal DictFind.pas geändert.
Es wird jetzt eine lineare Liste erzwungen.
function myRandom(i : TDictIntType):TDictIntType;inline;
begin
result := i*ccInitialSize+17;//random(i);
end;
denn alle erzeugten Zahlen Wert sind verschieden, aber (Wert mod ccInitialSize) = 17.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
2. Apr 2012
Hallo,
ich habe jetzt keine Version von csDictionary gesehen, die mit Int64 umgeht, sondern nur cardinal.
Deshalb habe ich dort einen TDictIntType eingeführt und dann auf Int64 zugewiesen.
Die procedure Add habe ich in eine Function:boolean umgewandelt, damit ich weiß, ob der Wert eingefügt wurde, also schon vorhanden war, sonst hätte ich .contains nutzen müssen, was in .Add ja auch gemacht...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
1. Apr 2012
Hallo,
Binsuche dauert zwar "nur" etwa 4xmal so lang auf meinem 2,3 Ghz Notebook bei 1 Mio Elementen, aber das Aufrechterhalten der Sortierung kostet viel zuviel Zeit.
Gruß Horst
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Horst_,
31. Mär 2012
Hallo,
@isilive:
Was tut denn dies Programm?
for i:=0 to arraysize do // arraysize=25 Mio.
begin
array1:=int64_x; //irgendeine zahl, zB: Zufallszahl
for j:=0 to i-1 do
if int64_x = array1 then
found:=true;