【问题标题】:Hash tables - complexity of insert, search, and delete哈希表 - 插入、搜索和删除的复杂性
【发布时间】:2016-08-29 16:58:59
【问题描述】:

我收到了两个关于哈希表复杂性的作业问题,但我很难理解它们之间的区别。

它们如下:

考虑一个哈希函数,它接受 n 个输入并将它们映射到一个大小为 m 的表。

  1. 写出散列函数的插入、搜索和删除的复杂性,该函数将所有 n 个输入均匀分布在散列表的桶中。

  2. 写出插入、查找和删除的复杂度,写出(据说完美但不现实)哈希函数永远不会有两个项目到同一个桶,即这个哈希函数永远不会导致冲突。

这两个问题对我来说似乎很相似,我不太确定它们的区别。

对于问题一,由于 n 个输入是均匀分布的,我们可以假设每个桶中将有 0 个或 1 个项目,因此插入、搜索和删除的所有操作都是 O(1)。这是正确的吗?

那么问题二有什么不同呢?如果函数永远不会导致冲突,那么所有项目将均匀分布,那么这不会导致每个操作的 O(1) 吗?

我对这些问题的想法是正确的还是我遗漏了什么?

编辑:

我相信我已经确定了哪里出错了。 O(1) 对于问题 3 中的每个操作都是正确的,因为散列函数是理想的并且不会导致冲突。

但是对于问题 2,项目是均匀分布的,但并不意味着每个存储桶中只有 1 个项目,例如,每个存储桶在链表中可以有 20 个项目。所以插入将是 O(1)。

但是搜索呢?这将是 O(1) + 搜索链表的成本。但我们不知道大小,只知道分布均匀。我们能用 n(输入的数量)和 m(表的大小)得到长度的表达式吗?

【问题讨论】:

    标签: hash hashtable big-o


    【解决方案1】:

    您的编辑在正确的轨道上。

    我们能否根据 n(输入的数量)和 m(表格的大小)得到长度的表达式?

    对于 1,如果哈希表大小以某种方式被禁止,这意味着负载因子(即每个桶的项目数)n/m 大于 1 并且不是恒定的,也不在恒定的范围内,那么您可以假设一个关系m = f(n),那么负载因子就是n / f(n),所以复杂度也是O(n/f(n))。

    在第二种情况下,复杂度总是 O(1)。

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 2019-05-10
      • 2014-05-25
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多