Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
16. Dez 2015
Das Ergebnis war genau so zu erwarten, weil der Algorithmus, mit dem Kollisionen durch diese Implementierung von TDirectory behandelt werden, zu immer grösseren "Klumpen" von Kollisionen führt, die die Performance komplett abstürzen lassen. Sobald sich einmal so ein Klumpen, aus welchem Grund immer, gebildet hat, hilft der beste Algorithmus zur gleichmässigen Verteilung der Hashkeys nicht mehr...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
15. Dez 2015
Leider kann ich mit meinem Delphi 2009 auf dem Beispiel von Sir Rufo nicht aufsetzen, da gibt es anscheinend einiges noch nicht, was in dem Code verwendet wird.
Natürlich ist ein guter Algorithmus zum möglichst kollisionsfreien Berechnen der Hashcodes wichtig. Allerdings würde eine bessere Implementierung des Dictionary bei weitem nicht so empfindlich reagieren wie diese, wenn Kollisionen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
15. Dez 2015
Diese Implementierung ist allerdings ziemlich miserabel.
Für eine brauchbare Hashtabelle braucht man entweder ein zweidimensionales Feld, oder eine Familie von Hashfunktionen, durch die man sicherstellt, dass keine "Ballungen" von Kollisionen auftreten.
Wenn ein eindimensionales Hashfeld verwendet und bei einer Kollision einfach immer der nächsthöhere Index genommen wird, entstehen immer...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
15. Dez 2015
Bist du dir da ganz sicher? :wink:
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
15. Dez 2015
Wenn ein Objekt als Key zum Sortieren übergeben wird, dann sollte doch normalerweise nach dem Inhalt des Objekts (den es nicht gibt) sortiert werden und nicht nach dem Pointer, oder sehe ich das falsch?
edit:
Ok, ich war schneller als Sir Rufo mir seiner Antwort, bzw. hat sich das überschnitten. Wenn gethashcode vom TObject den Referenz-Zeiger liefert, ist alles klar, dann funktioniert das....
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
15. Dez 2015
@SirRufo
Irgendwie verstehe ich überhaupt nicht, was du da machst.
Laut Dokumentation:
TObjectDictionary<TKey,TValue> = class(TDictionary<TKey,TValue>);
Key ist das TObject, Value ist der integer? Sollte es nicht andersrum sein?
Und alle Objekte sind leer, das Create allein tut doch gar nichts, und das TObject sieht doch gar keine Daten vor, die gibt es doch erst in den abgeleiteten...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by idefix2,
7. Aug 2015
ich würde auch meinen, dass für diese Aufgabenstellung ein Dictionary adäquat ist.
Sortierte Listen mit Binärsuche sind sinnvoll, wenn du die Daten gelegentich nach dem Schlüssel sortiert auslesen willst, das ist hier sicher nicht der Fall.