【问题标题】:Is there any relationship between input length and hash distribution?输入长度和哈希分布之间有什么关系吗?
【发布时间】:2015-08-16 04:40:16
【问题描述】:

我在 this site 中使用 Canterbury 语料库基准集测试了一些哈希函数。

在测试中,我的程序读取基准文件

对于每一个字节,连续的3或4个字节将作为散列函数的输入


示例)基准文件包含“ABCDEFGHI”

当输入长度为 3 时,'ABC' 是第一个输入并生成一些哈希值

接下来,'BCD' 是第二个输入并生成另一个哈希值,依此类推

当输入长度为 4 时,输入将是 'ABCD' 和下一个,'BCDE'



hash输出是32bit长,我的程序提取最后12bit,这12bit作为hash表的地址

我测试了 Rotation hash、one-at-a-time hash、Bernstein's hash、FNV hash。

当输入长度为 4 时,在每个测试用例中,哈希利用率总是比输入长度为 3 时更好。



输入长度和哈希分布之间有什么关系吗? 哈希的任何理论或特征?

还是巧合?

【问题讨论】:

  • “哈希利用率”是指“空间利用率”、“负载因子”还是其他?你到底在计算什么,你得到了什么数字?
  • 你散列了多少个不同的 3-gram?有多少种不同的 4 克?我同意@JohnFeminella:你究竟在测量什么?
  • 我计算(写入的哈希条目的数量)/(哈希条目的总数),输入长度 4 显示更高的值。
  • hmm..我没有检查n-gram信息。
  • 您应该发布您的代码、输入和输出,因为您的问题中有 许多 模棱两可,关于您所做的事情以及不值得的结果说话……

标签: hash hashtable probability


【解决方案1】:

是的。每当哈希表太“满”时,都会调整一个底层数组的大小。通常,底层数组的大小是从一个素数列表中挑选出来的,每个素数的大小大约是前一个大小的两倍。有很多方法可以做到这一点,但关键是对于给定的调整大小方案,如果您只是逐个添加元素,利用率会上下变化,但可能会在调整大小后立即下降。

【讨论】:

  • 你的意思是表格可以动态调整大小吗?在我的实验中,表格大小是固定的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多