我已經看過一兩個線程,但我仍然不認爲它已經完全清理了所以...如何刪除哈希表中的O(1)雙鏈接鏈接?
我一直在尋找哈希表中的鏈接在算法簡介(第11)。他們說,如果一個哈希表的鏈表被雙鏈接,那麼刪除可以在O(1)時間內執行。但我看不出如此如此。
T is a chained hash table. I want to delete element X from it.
h(X.key) returns the hash of X's key.
So, to delete X, pass X to the delete routine.
Then we can find X's slot in the linked list:
T[ h(X.key) ] = j
j is actually the pointer to the head of the linked list as > 1 key hashes to j.
So we still need to now search the linked list at j to find X to delete it,
regardless of whether or not the list is doubly linked.
And this search is O(n). So deletion is O(n)???
我的觀點是,我們是否還需要搜索鏈接列表中的X? X是我們想要存儲在散列表中的任意對象。它不包含指針。 鏈接列表中包含X的元素將包含指向鏈接列表中下一個元素和前一個元素的指針,但不包含X.
如果你這樣想,這是有道理的。但在現實生活中,您將對象存儲到哈希表中,而不是包含對象的節點以及指向其前一節點和下一節點的指針。因此,除非您嘗試構建LinkedHashMap(Java),否則不太有用。 – Alex