【问题标题】:What is the time complexity in chained hash table链式哈希表的时间复杂度是多少
【发布时间】:2014-08-06 04:37:22
【问题描述】:

我有一个哈希表,它由 1000 个元素和 100 个存储桶组成,每个存储桶最多 100 个条目。假设一个桶有 100 个条目(即该桶列表中有 100 个项目)。现在,如果我寻找的项目是存储桶列表中的第 100 个项目,那么就大 O 表示法而言,时间复杂度是多少。 O(100) 还是 O(n)?还是别的什么?

【问题讨论】:

  • 我不明白你的数据结构
  • 它是一个有 100 个桶的哈希表,每个桶最多可以链接 100 个项目以防发生冲突..
  • 所以元素的最大数量在 100 到 10000 之间,具体取决于值?好吧...如果我们测量必须搜索多少个元素:O(1),因为搜索 100(与哈希表中的总数无关)是恒定的。顺便提一句。 O(1)==O(100)

标签: c++ algorithm time-complexity hashtable


【解决方案1】:

您的问题没有意义,因为大 O 表示法表示效率如何随着元素数量的变化而变化,例如元素的数量增加到超过 1000,而您还没有告诉我们行为。

例如,查找特定元素的大O符号效率可能是:

  • 如果该元素末尾的桶永远不会超过100个元素,那么O(1)

  • 如果元素停留在该桶中的位置 100,那么即使在它之后附加了更多项目,那么假设搜索将从桶的开头开始,那么它仍然是 O(1)

  • 如果该桶中的元素数量保持在 N/10,并且您不能指望该特定元素保留在桶列表中的固定位置,则为 O(N)

  • 如果元素停留在该桶的末尾,但其中元素的数量始终是 N 平方的立方根,则 O(squared(立方根(N)))

  • 如果元素停留在该桶的末尾并且其中的元素数量始终在 3 * sqrt(N) 左右,则 O(sqrt(N))

如您所见,O 将搜索时间与元素总数相关联,但您没有提供足够的数据点来描述曲线。

【讨论】:

    【解决方案2】:

    big-O 表示法的要点是,您不要“假设一个桶有 100 个条目”,而是让其条目数为 n,并根据 n 得到表达式。

    对于列表中的n 条目,时间复杂度将为O(n),忽略您正在使用的任何散列函数。

    请注意,这是最坏的情况(最后一项),平均而言,搜索运行在O(1)

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 2019-09-12
      • 1970-01-01
      • 2020-11-19
      • 2011-04-26
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多