這題應該見的不少了,寫寫記錄一下。
實現該功能分析:
(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中,訪問完成後,我們在鍊錶中將該鍵刪除,然後將其新增到鍊錶的首部,表示最近剛訪問過這個鍵,當快取滿了後,如果要新增...