【问题标题】:resizing time complexity - Chain Hashing with Dynamic Array调整时间复杂度 - 使用动态数组进行链式哈希
【发布时间】:2021-04-13 10:06:40
【问题描述】:
我们构建了一个哈希表,它是一个动态数组,其中的每个元素都是一个链表(链式哈希)。
如果每次我们将哈希表的大小调整为原始大小的两倍,我们显然需要将链中的所有现有节点移动到新大小的哈希表中,我的问题是:如果我们遍历每个链表(链)——即使是空链——这会改变摊销 O(1) 的复杂性吗?如果是,则通过非空链表是一个很好的解决方案(摊销时间复杂度为 O(1))?
【问题讨论】:
标签:
c++
hash
resize
time-complexity
dynamic-arrays
【解决方案1】:
假设您维护x < 1 的load factor(一个好的默认值是保持0.25 < x < 0.5,其中x 是负载因子),并且您根据哈希表中的元素数计算它,您没问题。
您将要迭代表,这将花费线性时间(1/4*n 操作之后发生 - 这意味着您的摊销时间最多是 ~4*n / (1/4*n) = 16,这仍然是恒定的(这也说明了对空单元格的迭代)。