我正在阅读《算法简介》一书,我遇到了这个问题:
如果列表是双向链接的,我们可以在 O(1) 时间内删除一个元素。(注意,CHAINED-HASH-DELETE 将元素 x 而不是它的键 k 作为输入,这样我们就不必先搜索 x。如果哈希表支持删除,那么它的链表应该是双向链接的,这样我们可以快速删除一个项目。如果列表只是单链接的,那么要删除元素 x,我们首先必须在列表 T[h(x.key)] 中找到 x,以便我们可以更新 x 的下一个属性前辈。使用单链表,删除和搜索都将具有相同的渐近运行时间。)
如果列表是双链接的,我们如何在 O(1) 时间内删除一个元素?首先我们需要找到元素,然后我们可以在 O(1) 中删除它。但是要找到它,我们需要 O(列表长度)时间。也许在双向链表中删除更快(因为我们可以同时从列表的两端进行搜索,但这只是不断的改进),但我不知道如何在 O(1) 中完成时间。
先感谢您。