我正在寻找一个对大量输入进行分区的哈希函数
对少量分区具有良好一致性的数据(例如100或
256)。这意味着我期望发生很多碰撞,并且我不关心碰撞。

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

CRC算法是最早想到的思想之一。
已提出CRC8,但未提供其信息
均匀性对于CRC32显然是uniformity is not that good

列出了simplegeneral purpose哈希函数,
但没有透露它们的统一性。

鲍勃· Jenkins (Bob Jenkins)在哈希函数方面有完整的article,该哈希函数返回一个
32位值。我想对于一个均匀分布的32位值
而且所有可能的8位子集都应均匀分布
是好的候选人。但是将32位值减小为
8位值是否有8位的更简单算法?

最佳答案

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

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

09-25 17:41