我在特征字符串(如查询和标题)上使用哈希函数来生成稀疏的特征id。这个哈希函数应该是高效的,并且在uint64或uint32上有很好的分布。有人能给我一些建议吗?我在java中测试了两种方法。第一个是java hashCode。我发现它在类似的geohash字符串上有很多冲突。第二个是打击。它比hashCode有更多的冲突。
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;
}
(请忽略java long和c++uint之间的区别。一切都很好)
您可以尝试Murmurhash和cityhash