LRU(最近最少使用)算法原理及PHP实现( 二 )

HashMap+双向链表

基于 HashMap 和 双向链表实现 LRU的整体的设计思路是,可以使用 HashMap 存储 key,这样可以做到 save 和 get key的时间都是 O(1),而 HashMap 的 Value 指向双向链表实现的 LRU 的 Node 节点,如图所示:

LRU 存储是基于双向链表实现的,下面的图演示了它的原理。其中 head 代表双向链表的表头,tail 代表尾部。首先预先设置 LRU 的容量,如果存储满了,可以通过 O(1) 的时间淘汰掉双向链表的尾部,每次新增和访问数据,都可以通过 O(1)的效率把新的节点增加到对头,或者把已经存在的节点移动到队头。

LRU(最近最少使用)算法原理及PHP实现

代码实现

// 双项链表

function DLinkedNode(key, data) {

this.key = key;

this.data = http://www.veick.cn/news/data;

推荐阅读