2013-02-19 38 views
2

我在一次採訪中被問及散列表,我不得不解釋結構鏈。用O搜索鏈表(1)

我被問及如何在O(1)複雜性的鏈表中搜索元素。

我們可以用O(1)找到嗎?

謝謝

+2

把所有的元素放在一個哈希集? – assylias 2013-02-19 19:16:56

+1

asslias,你是對的,但是將元素添加到哈希集合是O(n):) – 2013-02-19 19:19:45

+1

@ilanberci是的,但是你只需要爲多個查找操作一次。 – Eric 2013-02-19 19:20:14

回答

9

不,絕對不是。鏈表無法快速找到某個項目 - 這是O(n)。

在散列表中搜索只有O(1)如果你有足夠好的散列碼。如果全部您的密鑰具有相同的哈希碼,則無論您使用哪種編址方案,都是O(n)。

+1

這是最有名望的點,我見過:O – Shivam 2013-02-19 19:24:17

+2

富有變得更豐富。 – 2013-02-19 19:25:35

+1

@SotiriosDelimanolis:不是從這個答案我不 - 至少不會,除非它被接受。 – 2013-02-19 19:26:50

5

除非在其他結構中保留對鏈接列表中的節點的引用,否則無法訪問O(1)中鏈接列表中的元素。這是因爲鏈表保持對列表頭部的引用,並且必須遍歷每個下一個元素以找到所請求的元素,這出現在O(n)中。

0

不,您不能在O(1)複雜度內的鏈接列表中進行搜索。

哈希表創建具有相同哈希值的元素的結構鏈或鏈接列表。

如果哈希值是均勻分佈的(好的哈希值),那麼哈希表將具有O(1)複雜度來搜索元素。哈希表具有存儲桶可以從哈希值訪問每個存儲桶,然後每個存儲桶包含具有相同哈希值的元素的鏈接列表。

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