提问者:小点点

在hashmap或hashtable中重新散列的成本


我已经研究了这个相关的问题hashmap或hashtable中的重新散列过程。但是我需要知道重新散列过程是如何执行的。例如,如果负载因子是.75;

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

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


共1个答案

匿名用户

这是否意味着我们忘记了现有的hashTable,对于每个现有条目,我们逐个获取它们,并将它们重新输入到新的桶集中,这次使用新的哈希函数?

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

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

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