【发布时间】: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