【问题标题】:A questions about HashMap's time Complexity一个关于HashMap的时间复杂度的问题
【发布时间】:2020-02-11 11:14:51
【问题描述】:

这不是代码问题,我只是想了解哈希图和时间复杂度的概念。

我想我知道 hashMaps/sets 等是如何工作的,我想我理解为什么 HashMaps.get 有一个恒定的时间,但是当我们有一个非常大的 hashMap 时,存储值的索引应该重叠。当 2 个哈希码解析为同一个索引时,它们会存储在该索引处的 LinkList 中,对吧?

难道不是所有元素都作为链接列表存储在一个索引中吗?现在不应该在 O(n) 的最坏情况下运行 HashMap.get。

【问题讨论】:

  • 是的,你是对的。这取决于哈希函数的实现。 hash() 的主要属性之一是一致性,每个哈希值的生成概率大致相同。

标签: hash linked-list hashmap time-complexity


【解决方案1】:

是的,HashMap 的最坏情况时间复杂度为 O(n),其中n 是存储在一个桶中的元素数。最坏的情况是 HashMap 的所有n 元素都存储在一个桶中。

但是,如果对每个存储桶实施二进制搜索,则可以改进这一点。在这种情况下,最坏情况的时间复杂度将是O(log(n)),因为binary search tree 用于存储元素,而不是doubly linked list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2017-05-17
    • 2020-10-11
    相关资源
    最近更新 更多