【问题标题】:How to use hash tables when amount of slots is unknown?当插槽数量未知时如何使用哈希表?
【发布时间】:2015-06-09 20:04:12
【问题描述】:

当所需的插槽数量在使用时未知时,如何使用哈希表和链接?换句话说,我需要在定义它的所有键和值之前使用哈希表,我该怎么做?我似乎无法弄清楚,因为我认为我需要知道所需的插槽数量才能创建哈希函数以将键映射到这些插槽,但也许我不太了解哈希表。

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

最好的问候, Skyfe。

【问题讨论】:

标签: data-structures hashmap hashtable


【解决方案1】:

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

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

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

两个音符:

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

  • 收缩是相同的,但您应该使用不同的滞后系数。请参阅上面的链接。

【讨论】:

    【解决方案2】:

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

    通常的做法是使用与动态数组相同的逻辑: 一些桶的数量以及当哈希中的项目太多时 表,创建一个更大的新哈希表并移动所有 项添加到新的哈希表中。

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2019-02-12
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多