【问题标题】: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 < 1load factor(一个好的默认值是保持0.25 < x < 0.5,其中x 是负载因子),并且您根据哈希表中的元素数计算它,您没问题。

    您将要迭代表,这将花费线性时间(1/4*n 操作之后发生 - 这意味着您的摊销时间最多是 ~4*n / (1/4*n) = 16,这仍然是恒定的(这也说明了对空单元格的迭代)。

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 2020-11-19
      • 2011-04-26
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2013-03-14
      相关资源
      最近更新 更多