当前位置:网站首页>【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;
}
};
边栏推荐
- Happy capital new dual currency fund nearly 4billion yuan completed its first account closing
- Mongodb index
- 7-6 mixed type data format input
- FPGA blocking assignment and non blocking assignment
- Puzzle (016.3) is inextricably linked
- 数学常数表 by q779
- Learn to punch in today
- Luogu p5536 [xr-3] core city solution
- 分布式事务(Seata) 四大模式详解
- 7-22 tortoise and rabbit race (result oriented)
猜你喜欢
Doris学习笔记之数据表的创建
Comprehensive evaluation of good-looking, easy-to-use and powerful handwriting note taking software: notability, goodnotes, marginnote, handwriting, notes writers, collanote, collanote, prodrafts, not
X86 assembly language - Notes from real mode to protected mode
Thinking about the arrangement problem in the backtracking problem (leetcode questions 46 and 47)
7-9 find a small ball with a balance
天图投资冲刺港股:资产管理规模249亿 投了小红书与奈雪
Accelerating strategy learning using parallel differentiable simulation
x86汇编语言-从实模式到保护模式 笔记
Showmebug entered Tencent conference, opening the era of professional technical interview
[qingniaochangping campus of Peking University] in the Internet industry, which positions are more popular as they get older?
随机推荐
7-6 mixed type data format input
亚马逊、速卖通、Lazada、Shopee、eBay、wish、沃尔玛、阿里国际、美客多等跨境电商平台,测评自养号该如何利用产品上新期抓住流量?
7-9 find a small ball with a balance
GRPC的四种数据流以及案例
Protobuf and grpc
Programming language: the essence of type system
[qingniaochangping campus of Peking University] in the Internet industry, which positions are more popular as they get older?
超简单手机地图开发
x86汇编语言-从实模式到保护模式 笔记
中感微冲刺科创板:年营收2.4亿净亏1782万 拟募资6亿
Sendmail无法发送邮件及发送过慢解决
Zhonggan micro sprint technology innovation board: annual revenue of 240million, net loss of 17.82 million, proposed to raise 600million
Similarities and differences between Allegro, OrCAD, net alias, port, off page connector and how to select them
Leetcode(4)——寻找两个正序数组的中位数
ShowMeBug入驻腾讯会议,开启专业级技术面试时代
7-20 print 99 formula table (format output)
tonybot 人形机器人 红外遥控玩法 0630
中国PETG市场预测及战略研究报告(2022版)
Luogu p5194 [usaco05dec]scales s solution
Exercise 10-8 recursive implementation of sequential output of integers