2016-07-29 61 views
0

我使用特征字符串(如查询和标题)上的哈希函数来生成稀疏特征id。这个散列函数应该是高效的,并且在uint64或uint32上具有良好的分布。任何人都可以给我一些建议吗? 我已经在java中测试了两种方法。 第一个是java hashCode。我发现它在类似的geohash字符串上有很多碰撞。 第二个是打击。它比hashCode有更多的冲突。用于在稀疏机器学习中生成uint64或uint32特征ID的好散列函数

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之间的差异和C++ UINT。一切都很好)

+0

地理散列使用减少字母。通用散列函数经常假定字符使用的均匀分布。因此,预计会发生许多碰撞。在散列之前,我会将geohash字符串转换为它的二进制对应字符串。 – Oncaphillis

回答

3

你可以尝试Murmurhashcityhash

+0

这个库支持哈希和一些更多https://github.com/OpenHFT/Zero-Allocation-Hashing –

+0

这就是我想要的。谢谢。 – formath