我正在寻找一个分区大量输入的哈希函数 对少数分区具有良好均匀性的数据(比如说100或者 256)。这意味着我期待很多碰撞,我不关心碰撞。
预先不知道输入数据。我希望字符串有一个长度 大概在6到100个字节之间。字符串可能分布很差 (例如,大部分空间或仅包含数字)。
CRC算法是首先考虑的想法之一。 已提出CRC8,但未提供有关其的信息 均匀; CRC32显然是uniformity is not that good。
有simple或general purpose哈希函数的列表, 但没有说明他们的统一性。
Bob Jenkins对哈希函数有一个彻底的article返回a 32位值。我认为对于均匀分布的32位值 所有可能的8位子集应该均匀分布,所以有 是好人选。但是将32位值减少到可能会有点过分 如果有8位更简单的算法,那么是8位值吗?
答案 0 :(得分:0)
我发现sdbm算法显示出良好的一致性,非常简单:
h := 0.
forEach ch in str {
h := (h * 65599) + ch;
}