【问题标题】:Hash table understading哈希表理解
【发布时间】:2019-07-02 20:54:58
【问题描述】:

我知道在我有一个包含 m 个单元格和 n 个元素的哈希表中,搜索成本 O(n/m)(平均而言) 让我们看一下使用哈希表的两个子算法: A. 当你有 n 个元素时,将它们插入到 m=100 的哈希表中,并使用它来搜索元素。 B. 当你有 n 个元素时,将它们插入到 m=n/3 的哈希表中,并使用它来搜索元素。

在情况 A 中,搜索的复杂度是 O(n/100)=O(n) 在情况 B 中,搜索的复杂度为 O(n/(n/3))=O(1) 这意味着如果我们想使用哈希表来搜索 O(1) 复杂度的元素,我们必须在创建哈希表时知道元素的数量,通过将 n 除以一个常数来计算 m,然后传递给集合的构造函数米

我说的对吗?我必须在我的哈希表的构造函数中传递 m 才能使用哈希表的好处吗?

【问题讨论】:

  • 准确地说,预期的搜索时间是O(1 + n/m)。大多数实现会自动调整哈希表大小,所以m 总是类似于n..2n。当元素数量对于当前的m 来说太大时,分配更大的哈希表。
  • "当元素数量对于当前 m 来说太大时,分配更大的哈希表"这意味着添加到哈希表可能在最坏的情况下 O(n) (因为分配了更大的哈希表) 但摊销时是 O(1) (就像向 ArrayList 添加一个元素)?
  • 没错。

标签: hashtable


【解决方案1】:

答案是,正如我从上面的 cmets 中了解到的,大多数实现会自动调整哈希表大小,因此 m 总是类似于 n..2n。当元素数量对于当前 m 变得太大时,分配更大的哈希表 这意味着添加到哈希表在最坏的情况下可能是 O(n)(因为分配了更大的哈希表)但在摊销时它是 O(1),就像向 ArrayList 添加一个元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多