【问题标题】:Why LRU caches use doubly link list and not singly link list?为什么 LRU 缓存使用双链表而不是单链表?
【发布时间】:2020-06-01 05:38:59
【问题描述】:

我一直在试图理解为什么 LRU 缓存使用双链表而不是单链表?

如果我按时间复杂度计算,它们在插入、更新和删除方面都相同。 Here is the Cheat sheet

是不是因为 DLL 中的两种方式的指针用于更容易地将节点移动到后面或前面??

【问题讨论】:

标签: algorithm data-structures linked-list hashmap lru


【解决方案1】:

使用列表(DLL/SLL)实现 LRU 缓存的想法是将最近使用的页面(节点)移到前面。

这涉及到很多移位,比如说节点在列表的中间(DLL/SLL),你必须删除节点,重新排列前一个节点的下一个指针。

现在在这种情况下,如果我们使用单链表,我们必须维护最近访问节点的前一个节点。

如果我们使用双向链表,则不需要此操作,因为它已经维护了上一个和下一个指针。

这里的问题是访问最新的节点,为此我们使用哈希表让我们在 O(1) 中访问该节点。

【讨论】:

    【解决方案2】:

    要从链表中删除目标节点,您需要修改指向它的其他节点。

    在双向链表中,目标节点具有指向这些其他节点的指针,因此很容易找到它们。

    在单链表中,目标节点没有有指向另一个节点的指针。不过,您仍然需要修改该节点,因此您必须搜索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2015-05-06
      相关资源
      最近更新 更多