Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何改进我的lru实现_Algorithm_Queue_Hashtable_Lru - Fatal编程技术网

Algorithm 如何改进我的lru实现

Algorithm 如何改进我的lru实现,algorithm,queue,hashtable,lru,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; 跟踪头和跟踪尾指针用于跟踪插入顺序。这用于根据最近使用的最少值删除元素。我认为有多个替代政

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

哈希表具有链接。代码的结构如下所示:

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

};



struct Node* lruhashtable[10];
struct Node* trackHead;
struct Node* trackTail;
跟踪头和跟踪尾指针用于跟踪插入顺序。这用于根据最近使用的最少值删除元素。我认为有多个替代政策被使用,而不是一个。因此,LRU与某些东西结合使用。因此,如果在我再次访问某个元素时要将其从LRU中删除,那么我需要将其从LRU中删除


从本质上说,我维护的是整个序列,如果有数百万条条目,那就不好了。除了使用优先级队列+哈希表之外,还有什么改进的方法吗?您需要维护整个序列,而且如果有数百万个条目,只要您做得对,也不错

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

如果可以找到要开始的节点,则从链表中删除元素是一个固定时间操作。如果没有哈希表,则必须进行迭代(线性时间),但既然有了哈希表,就不必进行任何迭代