Java 使用O(1)搜索链接列表
我在一次采访中被问及哈希表,我不得不解释结构链接 有人问我如何在复杂度为O(1)的链表中搜索元素 我们能用O(1)找到吗Java 使用O(1)搜索链接列表,java,linked-list,hashtable,Java,Linked List,Hashtable,我在一次采访中被问及哈希表,我不得不解释结构链接 有人问我如何在复杂度为O(1)的链表中搜索元素 我们能用O(1)找到吗 谢谢不,绝对不是。链表没有快速查找项目的巧妙方法-它是O(n) 如果您有足够好的哈希代码,则在哈希表中搜索仅为O(1)。如果所有键都具有相同的哈希代码,则无论使用何种寻址方案,都是O(n)。除非您在其他结构的链接列表中保留对节点的引用,否则无法访问O(1)中链接列表中的元素。这是因为链表保留了对列表头部的引用,并且必须遍历下一个元素以找到所请求的元素,结果是O(n)。否,您不
谢谢不,绝对不是。链表没有快速查找项目的巧妙方法-它是O(n)
如果您有足够好的哈希代码,则在哈希表中搜索仅为O(1)。如果所有键都具有相同的哈希代码,则无论使用何种寻址方案,都是O(n)。除非您在其他结构的链接列表中保留对节点的引用,否则无法访问O(1)中链接列表中的元素。这是因为链表保留了对列表头部的引用,并且必须遍历下一个元素以找到所请求的元素,结果是O(n)。否,您不能在O(1)复杂度内搜索链表 哈希表创建具有相同哈希值的元素的结构链接或链表 若散列是均匀分布的(良好的散列),那个么散列表在搜索元素时将具有O(1)复杂度。哈希表具有bucket每个bucket都可以从哈希值访问,然后每个bucket都包含具有相同哈希值的元素的链表
将所有元素放在一个哈希集中?asslias,你是对的,但是将元素添加到哈希集中是O(n):@ilanberci是的,但是你只需要做一次多次查找。面试官看到你是否知道这是可能的,或者如何做了吗?这就是我所想的O(n)这是正确的答案,我的头绕着O(1)@SotiriosDelimanolis:不是从这个答案我不知道-至少不知道,除非它被接受。@JonSkeet你在某一点后停止从投票中获得代表吗?@SotiriosDelimanolis:确实-看到了吗