当插槽数量未知时如何使用哈希表?

How to use hash tables when amount of slots is unknown?

当使用时所需的槽数量未知时,如何使用散列 tables 和链接?换句话说,我需要在定义所有键和值之前使用散列 table,我该怎么做?我似乎无法弄清楚,因为我假设我需要知道为了制作哈希函数以将键映射到这些插槽所需的插槽数量,但也许我没有完全理解哈希 table。

如果有人能帮助我,我将不胜感激!

此致, Skyfe.

一种方法是简单地采用 amortized dynamic arrays 的想法。

您决定几个因素,例如 - 初始大小、最大负载和增长因素。例如,您可以使用初始大小 = 100、最大负载 = 0.5 和增长因子 = 2。

如果插入的项目足够多,在某些时候您将拥有超过 50 = 100 * 0.5 的项目。此时你分配一个大小为200 = 初始大小* 增长因子= 100 * 2 的数组,重新分配项目,并擦除旧数组。等等

两个注意事项:

  • 在实践中,您不希望精确乘以给定的增长因子,因为您可能希望数组长度为质数。所以你乘以该因子,找到最近的较大素数(你应该预先计算)。

  • 收缩是一样的,但是你应该使用不同的滞后因子。见上文link。

这与您想要的类似: How to implement a dynamic-size hash table?

The usual approach is to use the same logic as a dynamic array: have some number of buckets and when there is too much items in the hash table, create a new hash table with a larger size and move all the items to the new hash table.