Ich verwende Hash-Funktion auf Feature-String (wie Abfrage und Titel), um spärliche Feature-ID zu generieren. Diese Hash-Funktion sollte effizient sein und eine gute Verteilung auf uint64 oder uint32 haben. Kann mir jemand Empfehlungen geben? Ich habe zwei Methoden in Java getestet. Der erste ist Java-HashCode. Ich habe festgestellt, dass es viele Kollisionen mit ähnlichen Geohash-Saiten gibt. Der zweite ist Schlag. Es hat mehr Kollisionen als hashCode.Gute Hash-Funktion zum Generieren von Uint64 oder Uint32 Feature-ID in Sparse Machine Learning
public static long gene(String s) {
long hash = 5381;
int c;
for (int i = 0; i < s.length(); i++) {
c = s.charAt(i);
hash = ((hash << 5) + hash) + c;
}
return hash;
}
(Bitte den Unterschied zwischen Java ignorieren lange und C++ uint. Alle fein)
geohash verwendet einen reduzierten Alphabet. Generische Hash-Funktionen gehen oft von einer gleichmäßigen Verteilung der Zeichen aus. Daher sind viele Kollisionen zu erwarten. Ich würde die Geohash-Zeichenfolge vor dem Hashing in binäre Gegenstücke umwandeln. – Oncaphillis