【问题标题】:Double hashing give a number larger than the size of table双散列给出一个大于表大小的数字
【发布时间】:2012-10-19 10:25:20
【问题描述】:

我有一个大小为 11 的哈希表,以数组的形式实现。我正在尝试使用双哈希技术;我已经完成了我的大部分数字。我的哈希函数如下:

h1 = key mod 11
h2 = 3*key mod 4

这给了我h(k,i) = k mod 11 + i(k * 3 mod 4) 其中 i = 0, 1, 2, 3, ...

我已经填充了插槽 0、1、4、8、9 和 10。我正在尝试插入 19。这是我对 19 进行哈希处理的结果:

1st time: 8  <-- collision 
2nd time: 9  <-- collision 
3rd time: 10 <-- collision 
4th time: 11 <--- well there is no index 11 table ends with index 10

我该怎么办?

另外,当他们说“让表有 11 个插槽”时,这是否意味着哈希表有从 0 到 10 的可用插槽?

【问题讨论】:

  • mean h(k,i) = key mod 11 + i*(key*3 mod 4)了吗?
  • 是的,如果我们第一次失败,我们必须使用的功能。
  • 好的,如果所有 11 个插槽都已满怎么办?
  • 您的哈希函数产生的值不在 [0..10] 范围内,请尝试修改它
  • 我正在查看这本书以再次确认。它说 h(k,i) (h2(k) +i*h2(k)) mod m 。所以 Searge 很抱歉,我认为我对方程式有误,

标签: algorithm hash double-hashing


【解决方案1】:

此更改将修复错误的哈希表索引计算:

h(k,i) = (key + i*(key*3 mod 4)) mod 11

【讨论】:

  • 是的,但是您仍然存在顺序条目的问题(使用任何 11 或更大的数字都会创建一个顺序模式)并且您没有考虑到几乎完整的哈希表。
  • 非常感谢大家。特别是塞尔戈,
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 2011-05-08
  • 2011-12-25
  • 2016-06-16
  • 2013-10-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
相关资源
最近更新 更多