Wird der folgende generierte Hash für unterschiedliche Schlüssel immer unterschiedlich sein, wenn angenommen wird, dass die Hash-Integer niemals überflogen wird? Der Schlüssel soll ASCII-codierte Zeichen enthalten.Ist diese Hash-Funktion einzigartig?
Ich denke das ist der Fall, da ich nicht an einen Ausnahmefall denken kann.
char[] arr = "abcd"
int hash = 0
for (int i=0; i<arr.size; i++) {
hash += (i+1) * arr[i]
}
EDIT1: Während der folgende sind technisch richtige Antworten auf meine ursprüngliche Frage, sollte ich erwähnt habe, dass die Domäne des Schlüssels, dass der gültigen E-Mail-IDs ist. Daher sind einige Ascii-Zeichen nicht enthalten. Trotzdem werde ich einige Tests durchführen und berichten. Das einzige Problem ist die Aufzählung aller Dauerwellen ist nur bis zu einer geringen Länge möglich.
Wie auch immer, meine Anforderung besteht darin, eindeutige IDs basierend auf E-Mail-IDs zu erstellen und sie als Primärschlüssel in einer Datenbank zu verwenden. Ich möchte einfach nicht die Mail-IDs selbst verwenden.
EDIT2: Okay, anscheinend gibt es viele Kollisionen. für z.B. Hash [email protected] == hash of [email protected]
...
040 == 012
041 == 013
042 == 014
043 == 015
044 == 016
045 == 017
046 == 018
047 == 019
048 == 01:
...
Ich brauche einen anderen Hashing-Algorithmus. Kannst du irgendwas vorschlagen?
"Wird der folgende generierte Hash für verschiedene Schlüssel immer unterschiedlich sein?" Mit der Definition von "Hash-Funktion" lautet die Antwort "Nein". Wenn die Antwort "Ja" ist - nennen Sie es nicht eine Hash-Funktion. –
Sie nehmen einen großen Wert-Raum und "komprimieren" es auf einen kleineren Raum. definitionsgemäß gibt es mindestens 2 Eingabewerte, die auf den gleichen Ausgang abgebildet werden. –
Es sollte mindestens eine Kollision geben – xdevs23