我怎样才能改进我的lru实现

时间:2012-10-11 22:57:44

标签: algorithm queue hashtable lru

我使用哈希表+链表实现了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中删除。

本来我维持整个序列,如果有数百万条目,那就很糟糕。除了使用优先级队列+哈希表

之外,还有什么办法可以改进吗?

1 个答案:

答案 0 :(得分:0)

你需要保持整个序列,只要你做得正确,如果有数百万条目,那就不错了。

关键是像任何其他哈希表一样制作哈希表。然后,您只需使用哈希表中的引用,而不是遍历链接列表来查找最近使用的节点。你将它从中间断开并将其移到前面。

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