使用 O(1) 搜索链表
Posted
技术标签:
【中文标题】使用 O(1) 搜索链表【英文标题】:Searching a linked list with O(1) 【发布时间】:2013-02-04 14:38:33 【问题描述】:我在接受采访时被问到关于哈希表的问题,我不得不解释结构链接。
有人问我如何在 O(1) 复杂度的链表中搜索元素。
我们真的可以用 O(1) 找到吗?
谢谢
【问题讨论】:
把所有元素放在一个hashset中? asslias,你是对的,但是将元素添加到哈希集中是 O(n) :) @ilanberci 是的,但您只需执行一次即可进行多次查找。 面试官是否知道你是否知道它是否可能,或者如何实际去做? 这就是我认为 O(n) 是正确答案的原因,并在 O(1) 中挣扎 【参考方案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/…以上是关于使用 O(1) 搜索链表的主要内容,如果未能解决你的问题,请参考以下文章