LRU快取替換演算法介紹與程式設計實現

2021-07-02 18:46:52 字數 1158 閱讀 1988

快取中容量是有限的,當要查詢的資料不在快取中時,我們要用新資料替換掉

部分原有得資料,有很多種替換策略,lru就是最近最少使用的被替換,我們想要

將來被使用的資料保留下來,但我們不知道將來會使用那些資料,就按照最近使用資料近似將來也會使用的資料。

我們要如何體現最近最少使用呢?採用乙個佇列,新加入的資料和上次使用過

的資料放到佇列頭,要替換時從佇列尾刪除資料

在實際實現中,並沒有採取佇列,而是使用鍊錶,因為根據定義我們需要經常

移動資料,採用連續空間的資料結構就不合適。

用了leetcode,lrucache這一題做為實現測試

lrucache裡,使用了unordered_map和雙向鍊錶

用雙向鍊錶來維護最近使用資訊

用unorderd_map來儲存key和value對映,**如下:

using

namespace

std;

typedef

struct node

int key;

node* pre;

node* next;

}node;

class lrucache

~lrucache()

}void changepos(int key)

if (tmp->pre && tmp->next)

else

if (tmp->pre)

else

head.next = tmp;

if(tmp!=oldhead)

}void inserthead(int key)

}int get(int key)

void

set(int key, int value)

else

}else

cache[key] = value;

}int cap;

int sz;

node head, end;

unordered_map

cache;

};

以288ms過了,所有過了**中間中等速度的吧,但是還有不少提公升空

LRU與LFU快取替換演算法C 實現

lfu實現 資料結構unordered map dqueue unordered map的鍵為key,值為node 方便快速訪問資料 dqueue雙端佇列,快速刪除 插入node 簡單的lru是存在缺點的,比如有某一次快取操作是完全隨機的,但是lru快取中替換為了這一次隨機的訪問資料 指的是,只有這...

LIRS快取替換演算法

lirs快取替換演算法 lirs low inter reference recency set 是乙個頁替換演算法,相比於lru least recently used 和很多其他的替換演算法,lirs具有較高的效能。這是通過使用兩次訪問同一頁之間的距離 本距離指中間被訪問了多少非重複塊 作為一種...

LRU快取介紹與實現

如何實現乙個lru呢?如果使用雙向鍊錶 hash實現。首先需求清楚 什麼是lru 需要哪些支援知識 怎麼使用這些基礎知識實現 如果高併發下怎麼辦 反思一些基礎知識。什麼是lru 就是最近最少訪問。需要哪些支援知識 那是不是就想起了linked。為什麼沒有使用linkedlist呢?而是使用linke...