我使用哈希函数对特征字符串(如查询和标题)进行处理,以生成稀疏特征ID。该哈希函数应高效且在uint64或uint32上具有良好的分布。谁能给我一些建议?我已经在Java中测试了两种方法。第一种是Java的hashCode。我发现它在相似的地理哈希字符串上存在许多碰撞。第二种方法如下。它比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