调整表大小时查找散列函数中的错误

时间:2014-04-08 17:00:33

标签: hashtable hash-function

在准备考试时,我遇到了一个关于哈希表的问题。 我得到一个长度为11的表,其中包含以下哈希函数:

h(k,i) = ( k mod 13 + i * (1 + k mod 7) ) mod 11

然后将哈希表的大小调整为大小12.因此新的哈希函数变为:

h'(k,i) = ( k mod 13 + i * (1 + k mod 7) ) mod 12

出现了哪些问题?

1 个答案:

答案 0 :(得分:0)

问题是哈希函数变得更糟。

在第一种情况下,ki的不同组合的分布在11个哈希箱中非常均匀。在第二种情况下,分布不是那么均匀 - 特别是,散列函数的结果为k的{​​{1}}和i的组合数量明显更高。

当然,在考试期间,人们可能不得不争论为什么就是这样。它与

有某种关系
  • k mod 13是0到 12
  • 之间的值
  • k mod 7是0到 6 之间的值(除以12)
  • 也许,不知何故:11是素数,12有许多除数......

但是(至少对我而言)很难找到超越这些琐碎见解的令人信服的推理。也许你有另一个基于此的想法。

0