Optimierung mittels Hashwerten. Problem Kollisionen. Alternative?
-
Hallo, ich hab folgendes Problem
Ich möchte Hashwerte von c++ Objekten erstellen um mittels der Hashwerte
Optimierungen in verschiedenen Bereichen zu erreichen.
Dazu hab ich mir gedacht dass die Objekte sich selbst als Dateien|Texte|XML darstellen können.
Von diesen Daten würde ich dann ein Hashwert erzeugen und diesen für weitere Vorgänge verwenden.Die Hashwerte sollen dann in einem Hashtable abgelegt werden um doppelte Objekte auszuschließen.
Nur sind ja die Hashwerte aufgrund von Kollisionen nicht eindeutig, und somit würde ich unter Umständen ungleiche Objekte ausschließen.Also wie könnte ich eine Eindeutigkeit erreichen ohne gleich die ganzen Daten als Hashwerte zu nehmen?
Hab mir gedacht, die Dateien in Sequenzen(Teilhashes) aufzuteilen, und die Sequenzen aus denen eine Datei bestehen würde
Schritt für Schritt durchzugehen falls nötig.Also so ne Art Dictionary oder Baum mit Hashtables.
Bevor ich mich aber an eine solche Implementierung ranmache,
wollte ich fragen ob es da nicht alternative Lösungen gibt?Thx
-
optimizeMe schrieb:
Also wie könnte ich eine Eindeutigkeit erreichen ohne gleich die ganzen Daten als Hashwerte zu nehmen?
verpass doch jedem objekt eine sogenannte 'GUID'
--> http://en.wikipedia.org/wiki/Globally_Unique_Identifier
-
Ich wette, dass du ohne C++ die Aufgabenstellung viel schneller & einfacher lösen könntest. Weiterhin wette ich, dass du diese Frage hier nicht stellen würdest, wenn du zu einer anderen Sprache gegriffen hättest.
Ich hab ja gehört, dass C++ zu komplizierteren Denken verhilft und deswegen auch ausstirbt. Und afaik ist Java nicht die beste Sprache von der Welt.
-
einfach ne globale funktion hash mit deinen typwen überladen.
neuer typ?class Foo{ int a; char c; string b; friend hash_t hash(Foo const& foo){ hash_t result=0; result=hashCombine(result,hash(a)) result=hashCombine(result,hash(b)) result=hashCombine(result,hash(c)); return result; } };
xml oder sowas wäre reines rechenzeit-wegwerfen und nichtmal einfach.
für container mußt du eigentlich alle elemente durchgehen, wie willst du sonst gleichheit sehen?? aber da kannst du auch die hash-berechnung auch inkrementell machen.
-
optimizeMe schrieb:
Ich möchte Hashwerte von c++ Objekten erstellen um mittels der Hashwerte
Optimierungen in verschiedenen Bereichen zu erreichen.Was willst du mit "Hashwerten von c++ Objekten" optimieren?