如何为动态哈希表实现哈希函数?

时间:2013-04-27 10:04:52

标签: algorithm hashtable dynamic-memory-allocation

我正在尝试实现一个通用的HashTable。 (这个问题是问题here

的延续

我已经修复了表格大小固定的情况下的通用哈希函数。但是,在实时情况下,使用HashTable是一个非常糟糕的主意,HashTable的大小最初固定为大约2 ^ 32位,因为它可能会导致大量内存浪费。

所以,我现在要做的是动态地增加hast表的大小,从一些初始值开始,只要它已经满了。

但是,当我这样做时,哈希函数现在会将新值返回到先前的哈希键

除了使用新值散列值之前,还有什么办法可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

你无法避免重复:在哈希表中元素结束的存储桶的位置取决于你的冲突解决策略,取决于两件或三件事:

  • 元素的哈希码,
  • 表的大小和
  • 当您使用线性探测时,它也存在或不存在具有哈希码的先前元素将它们放在同一个存储桶中

如果你改变这三个因素中的任何一个,你需要进行全面的重组:除非你做了一些非常糟糕的事情,比如选择一个非素数表大小,确定位置的hashCode % tableSize表达式的值是更改tableSize时会有所不同。在线性探测中散列到同一桶的元素的存在与否也将发生变化。这就是为什么你需要一个完整的重组。