【问题标题】:Searching a linked list with O(1)使用 O(1) 搜索链表
【发布时间】:2013-02-04 14:38:33
【问题描述】:

我在接受采访时被问到关于哈希表的问题,我不得不解释结构链接。

有人问我如何在 O(1) 复杂度的链表中搜索元素。

我们真的可以用 O(1) 找到吗?

谢谢

【问题讨论】:

  • 把所有元素放在一个hashset中?
  • asslias,你是对的,但是将元素添加到哈希集中是 O(n) :)
  • @ilanberci 是的,但您只需执行一次即可进行多次查找。
  • 面试官是否知道你是否知道它是否可能,或者如何实际去做?
  • 这就是我认为 O(n) 是正确答案的原因,并在 O(1) 中挣扎

标签: java linked-list hashtable


【解决方案1】:

不,您不能在 O(1) 复杂度内搜索链表。

哈希表创建具有相同哈希值的元素的结构链或链表。

如果散列是均匀分布的(良好的散列),那么散列表将具有 O(1) 复杂度来搜索元素。哈希表有桶,每个桶都可以从哈希值访问,然后每个桶包含具有相同哈希值的元素的链表。

http://www.algolist.net/Data_structures/Hash_table/Chaining

【讨论】:

    【解决方案2】:

    除非您在其他结构中保留对链表中节点的引用,否则您无法在 O(1) 中访问链表中的元素。这是因为链表保留了对链表头部的引用,并且必须遍历每个下一个元素以找到所请求的元素,这需要 O(n)。

    【讨论】:

      【解决方案3】:

      不,绝对不是。链表没有快速找到项目的巧妙方法 - 它是 O(n)。

      如果您有足够好的哈希码,则在哈希表中搜索只需 O(1)。如果所有您的密钥具有相同的哈希码,那么无论您使用什么寻址方案,它都是 O(n)。

      【讨论】:

      • @SotiriosDelimanolis:不是这个答案,我不知道——至少除非被接受,否则不会。
      • @JonSkeet 在某个点之后你会停止从点赞中获得代表吗?
      • @SotiriosDelimanolis:确实 - 见meta.stackexchange.com/questions/63327/…
      猜你喜欢
      • 2014-04-07
      • 2018-12-04
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多