我用坎特伯雷语料库基准集测试了这个站点的一些哈希函数。
在测试中,我的程序读取基准文件对于每个1字节,连续3或4字节将作为哈希函数
示例)基准文件包含"ABCDEFGHI"
当输入长度为3时,'ABC'是第一个输入,并生成一些哈希值
接下来,'BCD'是第二个输入并生成另一个哈希值,依此类推
当输入长度为4时,输入将是'ABCD',然后是'BCDE'
哈希输出是32位长,我的程序提取最后12位,这12位用作哈希表
的地址我测试了旋转哈希,一次哈希,伯恩斯坦哈希,FNV哈希。
在每个测试用例中,当输入长度为4时,哈希利用率总是优于输入长度为3时。
输入长度和哈希分布之间有关系吗?哈希有什么理论或特征吗?
还是只是巧合?
是。有一个底层数组,每当哈希表变得太"满"时,它就会调整大小。通常,底层数组的大小是从质数列表中选取的,每个质数的大小大约是前一个大小的两倍。有很多方法可以做到这一点,但关键是对于给定的调整大小方案,如果您只是逐个添加元素,利用率将上下变化,但可能在调整大小后立即下降。