假设我想建立一个完美的哈希表来查找预定义键为 12 个月的数组,因此我想要
hash("January")==0
hash("December")==11
我通过gperf运行我的月份名称并获得了一个不错的哈希函数,但它似乎给出了 16 个桶(或者更确切地说,范围是 16)!
#define MIN_HASH_VALUE 3
#define MAX_HASH_VALUE 18
/* maximum key range = 16, duplicates = 0 */
查看生成的 gperf 代码,它的哈希函数代码从 256 大小的表中简单地返回 len 和 char 值查找。不知何故,在我的脑海中,我想象了一个看起来很漂亮的功能...... :)
如果我想要正好 12 个桶(即我不想跳过未使用的桶)怎么办?对于这样的小集合,这真的没关系,但是当我有 1000 个预定义的键并且想要连续 1000 个桶时?
有人能找到一种确定的方法来做到这一点吗?