【问题标题】:Cost of rehashing in hashmap or hashtable在 hashmap 或 hashtable 中重新散列的成本
【发布时间】:2014-05-21 23:22:44
【问题描述】:

我已经研究过这个相关的问题Rehashing process in hashmap or hashtable。但是我需要知道重新散列过程是如何执行的。例如,如果负载因子是 0.75;

1-这是否意味着我们忘记了现有的哈希表,并且对于每个现有条目,我们将它们一个一个地获取并使用新的哈希函数将它们重新输入到一组新的桶中?

2- 如果是这样,那么重新散列的性能是什么,比如当有 n 个条目退出时。是 O(n) 摊销吗?

【问题讨论】:

  • 基本上使用旧哈希表中的条目构建了一个新哈希表。有一些方法可以使工作分布在多个访问中,或者可以一次完成。对于您的标准哈希方案,实际的重新哈希基本上是 O(n)。

标签: java hashmap hashtable


【解决方案1】:

这是否意味着我们忘记了现有的 hashTable 和 每个现有条目,我们将它们一一获取,然后将它们重新输入到新的 这次用新的哈希函数来设置桶?

是的,当底层数组被认为太小时时会发生这种情况。我们必须重新计算每个条目的哈希,因为新哈希表根据其大小具有不同的压缩函数。

如果是这样,那么 rehashing 的表现是什么,说什么时候 有 n 个条目退出。是 O(n) 摊销吗?

是的,对于前一个数组中的每个条目,都会计算一个新的哈希并重新输入该条目。所以O(n) 摊销了。根据桶链表的实现方式,最坏的情况可能是O(n^2),因为所有条目都可能进入同一个桶中。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2010-10-02
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多