Frage

ich eine GUID (als String) und den Hash davon bekommen. Kann ich diesen Hash betrachten, einzigartig sein?

War es hilfreich?

Lösung

Nicht so zuverlässig einzigartig wie die GUID selbst nicht.

Just zu erweitern, können Sie Ihre Einzigartigkeit von 16 Byte auf 4 Byte der möglichen Kombinationen um den Faktor 4, geht reduzieren.

Wie in den Kommentaren Größe der Hash darauf hingewiesen wird einen Unterschied machen. Das 4-Byte-Ding war eine Annahme, schrecklich besten ich weiß, dass es in .NET verwendet werden kann, wo die Standard-Hash-Größe ist 4 Byte (int). So kann man ersetzen, was ich oben gesagt mit dem, was Byte-Größe Ihrer Hash sein können.

Andere Tipps

Nein.

Sehen Sie hier, wenn Sie einen Mini-GUID wollen: http: //blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

Mit einem Wort: Nr.

Nehmen wir an, dass Ihre Hash weniger Bits als die GUID, durch das Loch Prinzip hat Taube, muss es existieren mehr als eine Zuordnung einiger GUID -> Hash, nur weil es weniger Hashes als GUIDS.

Wenn wir davon ausgehen, dass der Hash eine größere Anzahl von Bits als die GUID hat, gibt es eine sehr kleine - aber endlich -. Chance einer Kollision, vorausgesetzt, Sie eine gute Hash-Funktion mit

keine Hash-Funktion, die eine beliebige Größe Datenblock auf eine feste Größe Anzahl von Bits eine Abbildung 1-zu-1 reduziert wird zwischen den beiden herzustellen. Es existiert immer eine Chance, mit zwei verschiedenen Datenblöcken auf die gleiche Folge von Bits in dem Hash reduziert werden.

Gute Hash-Algorithmen minimieren die Wahrscheinlichkeit, dass dies geschieht, und in der Regel, desto mehr Bits in dem Hash, desto geringer die Chance einer Kollision.

Es ist nicht garantierte sein, aufgrund Hash-Kollisionen . Die GUID selbst ist fast garantiert werden.

Aus praktischen Gründen wahrscheinlich kann man davon ausgehen, dass ein Hash eindeutig zuzuordnen ist, aber warum nicht verwenden, die GUID selbst?

Nein, und ich würde nicht Einzigartigkeit eines Hash-Wert übernehmen. Das sollte keine Rolle spielen, da Hash-Werte müssen nicht einzigartig, sie müssen nur gleichmäßig über ihren Bereich zu verteilen. Je gleichmäßiger die Verteilung, desto weniger Kollisionen auftreten (in der Hash-Tabelle). Weniger Kollisionen bedeuten bessere hashtable Leistung.

FYI Für eine gute Beschreibung, wie Hash-Tabellen arbeiten, lesen Sie die akzeptierte Antwort auf Was Hashtables und Hashmaps und deren typische anwendungs~~POS=TRUNC?

Wenn Sie verschlüsselten Hash verwenden (MD5, SHA1, RIPEMD160), wird der Hash eindeutig sein (Modulo Kollisionen, die sehr unwahrscheinlich sind - SHA1 zB für digitale Signaturen verwendet wird, und MD5 ist auch kollisionsresistent auf Random Eingänge ). Obwohl, warum haben Sie eine GUID Hash möchten?

würde Ich mag einen GUID X Größe Hash mit der Erkenntnis, dass manchmal habe ich 10 oder weniger GUIDS in gesetzt, so könnte ich weg mit einer kürzeren Hash ohne Kollision, als wenn ich 10.000.000 GUID in einem Satz habe. Ich möchte nur in der Lage sein wie die Größe des Hash angeben, wenn ich die Funktion aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top