演算法 實現LRU快取,讀取 寫入O 1 實現

2021-09-22 13:47:00 字數 509 閱讀 7125

這題應該見的不少了,寫寫記錄一下。

實現該功能分析:

(1) o(1) 時間完成查詢,那除了 hash 別無選擇。

(2) lru 最近最少使用演算法,為了方便資料的淘汰。需要對最近訪問的資料放未訪問資料之前。

用雙向鍊錶實現即可。(通常情況下,雙向鍊錶讀取、插入的時間複雜度都是o(n), 但是如果知道插入位置,則可以實現o(1)實現。)

實現: hash存key對應的資料在雙向鍊錶中的位置,就可以完成該功能。

具體**:

1 #include 2 #include //

std::list雙向鍊錶實現

3 #include 4

5const

int max_value_len = 32;6

const

int max_element_num = 3;7

8struct

cachenode;

1314

class

lru;

LRU演算法的O 1 實現 以及 應用

lru是least recently used的縮寫,即最近最少使用,是一種常用的頁面置換演算法,選擇最近最久未使用的頁面予以淘汰。使用map 鍊錶 1 鍊錶負責維護node的順序。2 map負責以o 1 的複雜度快速定位node在鍊錶中的位置。具體的,map的key存node值,map的value...

設計複雜度為O 1 的LRU快取結構

題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 示例1輸入 複製 1,1,1 1,2,2 1,3,2 2,1 1,4,4 2,2 3 輸出複製 1,1 說明第一次操作後 最常使用的記錄為 1 1 第二次操作後 最常使用的記錄為 2 2 1 1 變為最不常用...

快取 LRU演算法實現

以下是基於雙向鍊錶 hashmap的lru演算法實現,對演算法的解釋如下 設定乙個map存放對應的鍵和值,同時設定乙個雙向鍊錶,來儲存最近最久未使用的關係,如果訪問乙個鍵,鍵存在於map中,訪問完成後,我們在鍊錶中將該鍵刪除,然後將其新增到鍊錶的首部,表示最近剛訪問過這個鍵,當快取滿了後,如果要新增...