散列函数具有良好的未知输入均匀性

时间:2011-12-20 13:05:30

标签: hash uniform

我正在寻找一个分区大量输入的哈希函数 对少数分区具有良好均匀性的数据(比如说100或者 256)。这意味着我期待很多碰撞,我不关心碰撞。

预先不知道输入数据。我希望字符串有一个长度 大概在6到100个字节之间。字符串可能分布很差 (例如,大部分空间或仅包含数字)。

CRC算法是首先考虑的想法之一。 已提出CRC8,但未提供有关其的信息 均匀; CRC32显然是uniformity is not that good

simplegeneral purpose哈希函数的列表, 但没有说明他们的统一性。

Bob Jenkins对哈希函数有一个彻底的article返回a 32位值。我认为对于均匀分布的32位值 所有可能的8位子集应该均匀分布,所以有 是好人选。但是将32位值减少到可能会有点过分 如果有8位更简单的算法,那么是8位值吗?

1 个答案:

答案 0 :(得分:0)

我发现sdbm算法显示出良好的一致性,非常简单:

        h := 0.
        forEach ch in str {
            h := (h * 65599) + ch;
        }