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

标签 algorithm hashtable dynamic-memory-allocation

我正在尝试实现一个通用的哈希表。 (这个问题是问题 here 的延续)

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

所以,我现在要做的是,当 hast 表已满时,从某个初始值动态增加它的大小。

但是,当我执行此操作时,哈希函数将现在将新值返回给之前经过哈希处理的键

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

最佳答案

您无法避免重新哈希:元素在哈希表中结束的桶的位置取决于两个或三个因素,具体取决于您的冲突解决策略:

  • 元素的哈希码,
  • 表格的大小,以及
  • 当您使用线性探测时,是否存在具有哈希码的先验元素也会将它们放在同一个桶中

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

关于algorithm - 如何为动态哈希表实现哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16250754/

相关文章:

python - 我无与伦比的井字游戏程序失败了

java - 如何制定图像压缩算法?

ruby - alpha-beta 剪枝方法有问题,返回 beta 吗?也许我不明白这是如何运作的

c++ - 查找总和等于 k ​​的子集的数量

java - 如何比较哈希表中的值?

javascript - 遍历对象哈希表

c - 结构数组上的 realloc() 给出无效的下一个大小

memory - allocate 语句的顺序或语法会影响性能吗? (Fortran)

c++ - 与树相比通常的哈希表实现

c++ - 包含字符串值的结构在使用动态内存分配创建后在分配时导致段错误