Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
25. Apr 2012
Wie auch immer, auf jedenfall konnte ich schon erfolgreich die orginale csDictionary verwenden. Ich hab mit grossen Zahlen gerechnet - mpArith von Wolfgang Ehrhardt. Das BigNumberErgebnis wollte ich zusammen mit einem Integer in eine Hashtable schreiben.
Wenn man die bigNumber als String ausgibt kann man sie problemlos im Stringdictionary verwenden. Es ist praktisch, dass man Strings...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
24. Apr 2012
Um nochmal auf die Hauptroutine von Horst zurückzukommen (warum seine dictionary.pas bei mir knallt ist momentan nicht so wichtig. Die orginale funzt ja tadellos.)
j := low(A64);
For i := low(A64) to High(A64) do
begin
Wert := random(RANDOMRANGE);
IF TestHash.Add(Wert,Pointer(j)) then
begin
A64 := Wert;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
24. Apr 2012
Es ist eine Zugriffsverletzung "Lesen von Adresse 00000001" und bezieht sich nur auf die abgewandelte .pas Datei von Horst, der sie ja primär auf Freepascal geschrieben hat. Der Fehler tritt unregelmässig und nur bei 500-2000 Schleifendurchläufen auf, was darauf hindeutet, dass es dann knallt wenns eine Kollision in der Hashtable gibt. (Aber um das genau zu wissen versteh ich das ganze Konstrukt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
24. Apr 2012
Danke, habs jetzt unter Delphi 2009, Win7 zum laufen gebracht. Allerdings knallt es regelmässig nach ca. 500 bis 2000 Schleifendurchläufen und zwar beim
Hash.Add:
-> Zeile 535 der DictionaryUnit
With PIntHashEntry(Result)^ Do
If heKey = aKey Then <-- hier knallts
Exit
Wohl bei der ersten Kollision?! Warum versteh ich noch nicht ganz...
Verstehe ich deinen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
1. Apr 2012
Ok, soweit war es mir schon klar, aber:
- Der Pointer kriegt einfach immer NIL übergeben?
- Brauch ich das Array "Samples" auch, oder übernimmt das Dictionary beide Datenfelder?
Nehmen wir mal ich habe
einen fortlaufenden Integer 0..5Millionen
jeweils eine zugehörige Zufallszahl vom Typ INT64
und die INT64 möchte ich auf Gleichheit/Kollision überprüfen und dann den zugehörigen Integer...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
30. Mär 2012
Danke für eure Antworten!
Mein Array hat 25 Mio. Einträge und obwohl die lineare suche bei < 1 Mio Einträge noch ganz ok ist wenn man sie flott programmiert, wird es bei mehreren Mio. Einträgen eine Katastrophe.
for i:=0 to arraysize do // arraysize=25 Mio.
array1:=int64_x; //irgendeine zahl, zB: Zufallszahl
for j:=0 to i-1 do
if int64_x = array1 then
found:=true;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by isilive,
28. Mär 2012
Hallo Leute,
ich habe ein sehr grosses Array mit mehreren Millionen Einträgen vom Typ INT64.
Nun möchte ich diese Zahlen schnell auffinden können bzw. nachschauen, ob sie schon im Array existiert.
Ich denke dazu würde sich wohl eine Hashtable anbieten und ich hab diese hier gefunden.
Blöde Frage: Wie benutz ich die Hashtable?
Als TIntegerDictionary erwartet sie von mir bei Add(Key, Data)...