java - 如果采用线性探测,删除是否比单独链接的情况更便宜?

标签 java hash hash-collision

对于哈希表,正如我们所熟悉的那样,我们首先计算哈希函数。然后我们需要处理碰撞;当两个或多个键插入散列到同一索引时的情况。执行此操作的两种方法包括单独链接和线性探测。我的问题又是,哪种方法删除成本更低?

我最初的想法是,如果线性探测中的簇很大,并且我们想要在簇中早期删除某些键,则将所有键重新插入到已删除键的右侧可能会变得昂贵。

如果这个陈述完全有效,是否有足够的理由假设单独的链接在删除方面比线性探测更有效?

最佳答案

在线性探测的情况下,删除会影响对具有早于清空单元格的哈希值但存储在晚于清空单元格的位置的其他键的搜索。空的单元格会导致这些搜索错误地报告 key 不存在。因此,当一个单元格被清空时,有必要向前搜索表格中的后续单元格,直到找到另一个空单元格或可以移动到该单元格的键,并且该过程需要继续下去,直到找到一个空单元格。

但是在单独链接的情况下,我们只需要从链表中删除值,并且从链表中删除值比线性探测情况下的上述过程容易得多。

关于java - 如果采用线性探测,删除是否比单独链接的情况更便宜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58122078/

相关文章:

c# - 将哈希值转换为十六进制字符串

c - 在 C 中寻找数组(与链表)哈希表实现

algorithm - 使用二次探测时如何找到数组中的特定元素?

hash - 理解循环多项式哈希冲突

java - 如何检查 2 秒内发生了多少事件? (定时器)

ruby-on-rails - 有点难看——不存在的哈希键的默认值?

java - 为什么在使用 java -jar 调用时打印函数不打印?

algorithm - 字符串的成对独立哈希函数?

java - 将计时器添加到我的程序 (javafx)

java - 创建不同的 ImageView 对象 - 不同的时间