【问题标题】:why Hash table time complexity is o(1)为什么哈希表时间复杂度是o(1)
【发布时间】:2020-09-11 15:58:07
【问题描述】:

如果哈希表是底层的数组,那么为什么插入和删除操作的时间复杂度为 o(1)。 它会被存储为空闲内存插槽而不是背靠背内存插槽吗? 为什么我们不考虑哈希表本身的复制操作?

我尝试搜索一些在线参考资料,但没有找到重要的答案。

【问题讨论】:

    标签: arrays data-structures time-complexity runtime hashtable


    【解决方案1】:

    大多数哈希表实现在所谓的摊销时间内插入和删除都具有O(1) 复杂性。这意味着有时一个操作可能确实需要大量时间(例如数量级N - 表中元素的数量),但是在任何给定的插入/删除查询的无限序列中,每个查询的平均操作量将是受一个常数限制。这类似于一个简单的动态数组的插入在摊销时间内是O(1),即使偶尔插入会导致数组的完整副本,这绝对不是一个恒定的时间操作。

    【讨论】:

      【解决方案2】:

      在某些情况下,Hastable 是 linkedlistsbinary search trees 的数组。

      • 为什么要删除 O(1)?
        Ans: 当你删除一个键时,你首先计算它的哈希值,然后你知道这个键在哪个确切位置大批。操作是O(1),因为你直接去那里删除密钥。
      • 为什么要插入 O(1)?
        答:同上。
      • 它会被存储为空闲内存槽而不是背靠背的内存槽吗?
        回答:是的,这就是创建存储桶的目的。它会是空的。当大小达到特定限制时,桶将重建并增加大小。但这不会经常发生,也不会影响整体时间复杂度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-10
        • 2019-11-09
        • 2019-12-24
        • 2017-09-01
        • 1970-01-01
        • 2020-11-19
        • 2021-01-01
        • 1970-01-01
        相关资源
        最近更新 更多