【问题标题】:How can I improve my lru implementation如何改进我的 lru 实施
【发布时间】:2012-10-11 22:57:44
【问题描述】:

我已经使用哈希表+链表实现了 LRU。

哈希表有链接。代码结构如下:

struct Node{
int value;
struct Node *next;
struct Node* head;
struct Node* tail;

};



struct Node* lruhashtable[10];
struct Node* trackHead;
struct Node* trackTail;

trackHead 和 trackTail 指针用于跟踪插入的顺序。这用于删除最近最少使用的元素。我在想有多个替换策略被使用,而不是一个。因此,LRU 与某些东西的组合一起使用。因此,如果在我再次访问该元素时要从 LRU 中删除一个元素,那么我需要将它从 LRU 中删除。

本质上,我要维护整个序列,如果有数百万个条目,那就不好了。除了使用优先级队列+哈希表之外,还有什么方法可以改善这一点

【问题讨论】:

    标签: algorithm queue hashtable lru


    【解决方案1】:

    你需要维护整个序列,只要你做对了,有几百万个条目也不错。

    关键是要像制作任何其他哈希表一样制作哈希表。然后,您只需使用哈希表中的引用,而不是遍历链表来定位这个最近使用的节点。你从中间取消链接,然后把它移到前面。

    如果您可以找到要开始的节点,则从链表中删除元素是一个恒定时间操作。如果没有哈希表,则必须迭代(线性时间),但由于您确实有哈希表,因此您不必进行任何迭代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多