Gibt es eine Möglichkeit, den Min/Max-Hash-Code für eine Zeichenfolge einer bestimmten Länge mit Javas .hashCode() Methode zu berechnen?Min/Max-HashCode-Werte für einen String mit einer bestimmten Länge finden
Vom docs, der verwendete Algorithmus ist:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
... und es gibt eine int
, die positiv oder negativ sein kann.
Da es alle Zeichen fügt den Hash zu berechnen, ich habe versucht, durch die Min-/Max-Hash zu finden .hashCode()
auf Saiten von gleicher Länge aus der Min-/Max-Zeichenwerte läuft (space
= 32, ~
= 126), aber ich bekomme Werte für s
, die außerhalb des Bereichs für meine Min/Max-Hashes sind.
int s = "hello world".hashCode(); // 1794106052
// strings the same len as "s"
int minHash = " ".hashCode(); // 2142006304
int maxHash = "~~~~~~~~~~~".hashCode(); // -2034832962
// hash for s i
Aha! Das macht sehr viel Sinn (ich dachte, es wäre überfüllt, ich konnte einfach nicht herausfinden, wo.) Kannst du mir sagen, warum das bei 6 Zeichen passiert und nicht etwa bei 5 oder 7? – JeffThompson
Das erste n wobei 126 * 31^(n-1)> Integer.MAX_VALUE ist 6. –
Gotcha. Und wie würde ich den Min/Max-Hash für Strings mit weniger als 6 Zeichen berechnen? – JeffThompson