如何使用哈希表&当使用时所需的插槽数量尚未知时链接?换句话说,我需要在定义所有键和值之前使用哈希表,我该怎么做?我似乎无法弄明白,因为我认为我需要知道为了制作哈希函数将键映射到那些插槽所需的插槽数量,但也许我不太明白哈希表的想法权。
如果有人能帮助我,我将不胜感激!
祝你好运, Skyfe。
答案 0 :(得分:2)
这样做的一种方法就是采用amortized dynamic arrays的想法。
您可以决定几个因素,例如:初始大小,最大负载和增长因子。例如,您可以使用初始大小= 100,最大负载= 0.5,增长因子= 2.
如果插入了足够多的项目,在某些时候您将拥有超过50 = 100 * 0.5的项目。此时,您将分配一个大小为200 =初始大小*增长因子= 100 * 2的数组,重新分配项目,并擦除旧数组。等
两个注释:
在实践中,您可能不希望完全按给定的增长因子进行多次操作,因为您可能希望数组长度为素数。所以你乘以因子,找到最近的较大的素数(你应该预先计算)。
收缩是一样的,但是你应该使用不同的滞后因子。见上面的链接。
答案 1 :(得分:1)
这与您想要的类似: How to implement a dynamic-size hash table?
通常的方法是使用与动态数组相同的逻辑:have 一些桶,当哈希中的项目太多时 表,创建一个更大的新哈希表并移动所有 项目到新的哈希表。