使用线性探测实现 Hashtable 时调整大小权衡

Posted

技术标签:

【中文标题】使用线性探测实现 Hashtable 时调整大小权衡【英文标题】:resizing tradeoffs when implementing Hashtable using linear probing 【发布时间】:2015-11-21 22:23:57 【问题描述】:

我正在尝试使用线性探测来实现哈希表。

在将(键,值)对插入哈希表之前,我想检查它是否是半满的。如果是,我需要将底层数组的大小加倍。

显然,有两种方法可以做到这一点:

一种是创建另一个大小加倍的数组,重新散列旧数组中的所有条目并将它们添加到新数组中。然后,将旧数组重新绑定到新数组。这种方式很容易实现,但占用大量空间。

另一种是将数组加倍并就地进行重新散列。似乎这种方式可能会导致更长的运行时间,因为重新散列可能会导致与新散列的插槽和旧插槽发生冲突。

我应该使用哪种方式?

【问题讨论】:

【参考方案1】:

您的第二个解决方案仅在调整大小过程中节省空间如果实际上有空间就地扩展现有哈希表 - 我认为大型哈希表的情况可能是这样很苗条,所以我会选择你的第一个解决方案。

【讨论】:

以上是关于使用线性探测实现 Hashtable 时调整大小权衡的主要内容,如果未能解决你的问题,请参考以下文章

HashTable 中二次探测的运行时间是多少?

选择时调整单元格大小时出现 NSAutoResizingMaskLayoutConstraint 错误

如何在使用 jQuery(可拖动和可调整大小)拖动光标时调整图像大小

用数组实现 最简 hash线性探测

使用“大小”参数时调整散点图中的标记大小

使用 Transform 旋转时调整 UIView 的大小