当前位置:网站首页>【7.3】146. LRU caching mechanism
【7.3】146. LRU caching mechanism
2022-07-03 14:32:00 【howtoloveyou】
Method : Hashtable + Double linked list
- keyword :key,value Yes
- pattern recognition : Once a key value pair appears , Think of hash table
- Change the access time of data :1 Need to be able to access randomly ,2 You need to be able to insert the data into the head or tail
test :
- Test insert , Including spillage
- Test update , Check for correct updates
- Test read , Check whether it can be read correctly
hashmap+ Double linked list , Complexity analysis :
- Time complexity :O1, Hash table location O1, List operation O1
- Spatial complexity :Oc
Code :
struct DLinkedNode {
int key, value;
DLinkedNode* prev;
DLinkedNode* next;
DLinkedNode(): key(0), value(0), prev(nullptr), next(nullptr) {
}
DLinkedNode(int _key, int _value): key(_key), value(_value), prev(nullptr), next(nullptr) {
}
};
class LRUCache {
private:
unordered_map<int, DLinkedNode*> cache;
DLinkedNode* head;
DLinkedNode* tail;
int size;
int capacity;
public:
LRUCache(int _capacity): capacity(_capacity), size(0) {
While initializing the data structure in the code , initialization capacity and size Two parameters
// Using pseudo head and pseudo tail nodes
head = new DLinkedNode(); Create a head node
tail = new DLinkedNode(); Create tail node
head->next = tail; Head -》 The tail
tail->prev = head; Head 《- The tail
}
int get(int key) {
if (!cache.count(key)) {
If not, return -1
return -1;
}
// If key There is , First, locate through the hash table , And then to the head
DLinkedNode* node = cache[key]; Locate the node through the hash table and then operate on it
moveToHead(node); Here, the header is represented as the most frequently used element
return node->value;
}
void put(int key, int value) {
if (!cache.count(key)) {
// If key non-existent , Create a new node
DLinkedNode* node = new DLinkedNode(key, value);
// Add to hash table
cache[key] = node;
// Add to the head of the bidirectional list
addToHead(node);
++size;
if (size > capacity) {
// If the capacity is exceeded , Delete the tail node of the bidirectional linked list
DLinkedNode* removed = removeTail();
// Delete the corresponding entry in the hash table
cache.erase(removed->key);
// Prevent memory leaks
delete removed;
--size;
}
}
else {
// If key There is , First, locate through the hash table , Revise value, And move to the head
DLinkedNode* node = cache[key];
node->value = value;
moveToHead(node);
}
}
void addToHead(DLinkedNode* node) {
node->prev = head;
node->next = head->next;
head->next->prev = node;
head->next = node;
}
void removeNode(DLinkedNode* node) {
node->prev->next = node->next;
node->next->prev = node->prev;
}
void moveToHead(DLinkedNode* node) {
removeNode(node);
addToHead(node);
}
DLinkedNode* removeTail() {
Here we extract the nodes that have not been used recently , It will not affect the operation of deleting him in the hash table , Because he didn't disappear
DLinkedNode* node = tail->prev;
removeNode(node);
return node;
}
};
边栏推荐
- Showmebug entered Tencent conference, opening the era of professional technical interview
- 7-11 calculation of residential water charges by sections
- 7-23 currency conversion (using array conversion)
- 天图投资冲刺港股:资产管理规模249亿 投了小红书与奈雪
- Comprehensive evaluation of good-looking, easy-to-use and powerful handwriting note taking software: notability, goodnotes, marginnote, handwriting, notes writers, collanote, collanote, prodrafts, not
- Exercise 6-6 use a function to output an integer in reverse order
- NFT new opportunity, multimedia NFT aggregation platform okaleido will be launched soon
- NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
- Doris学习笔记之数据表的创建
- Exercise 9-3 plane vector addition
猜你喜欢

tonybot 人形机器人 首次开机 0630

7-10 calculate salary

556. The next larger element III

Understanding of closures

Happy capital new dual currency fund nearly 4billion yuan completed its first account closing

Concat and concat_ Ws() differences and groups_ Use of concat() and repeat() functions

adc128s022 ADC verilog设计实现

Exercise 10-1 calculate the sum of 1 to n using recursive functions

Eight sorts

Tailing rushes to the scientific and Technological Innovation Board: it plans to raise 1.3 billion, and Xiaomi Changjiang is the shareholder
随机推荐
Thread.sleep和TimeUnit.SECONDS.sleep的区别
US stock listing of polar: how can the delivery of 55000 units support the valuation of more than 20billion US dollars
NPM install is stuck with various strange errors of node NPY
7-16 find the set of integers that meet the given conditions
Concat and concat_ Ws() differences and groups_ Use of concat() and repeat() functions
7-18 finding the single root of polynomial by dichotomy
Paper sharing: generating playful palettes from images
泰凌冲刺科创板:拟募资13亿 国家大基金与小米长江是股东
tonybot 人形机器人 首次开机 0630
C library function - qsort()
GRPC的四种数据流以及案例
牛客网:过河卒
Understand the application scenario and implementation mechanism of differential segment
FPGA blocking assignment and non blocking assignment
ConstraintLayout 的使用
全文检索引擎Solr系列—–全文检索基本原理
Special research report on the market of lithium battery electrolyte industry in China (2022 Edition)
Add ZABBIX calculation type itemcalculated items
Too many files with unapproved license
中国PETG市场预测及战略研究报告(2022版)