lru
lru(least recently used,最近最少使用)演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是「如果資料最近被訪問過,那麼將來被訪問的機率也更高」。
實現原理
利用list記錄key的次序,每次set,或get操作將key插入到list首位。
緩衝區滿之後再出現set操作,移除末尾的key。
使用python3 ,key in dict判斷key是否出現過,python2中應該為has_key
class
lrucache:
def__init__
(self, size=3):
self.cache = {}
self.keys =
self.size = size
defget(self, key):
if key in self.cache:
self.keys.remove(key)
self.keys.insert(0, key)
return self.cache[key]
else:
return
none
defset
(self, key, value):
if key in self.cache:
self.keys.remove(key)
self.keys.insert(0, key)
self.cache[key] = value
elif len(self.keys) == self.size:
old = self.keys.pop()
self.cache.pop(old)
self.keys.insert(0, key)
self.cache[key] = value
else:
self.keys.insert(0, key)
self.cache[key] = value
if __name__ == '__main__':
test = lrucache()
test.set('a',2)
test.set('b',2)
test.set('c',2)
test.set('d',2)
test.set('e',2)
test.set('f',2)
print(test.get('c'))
print(test.get('b'))
print(test.get('a'))
預期輸出為
none
none
none
python實現LRU快取淘汰
lru least recent used 最近最少使用演算法,主要用於快取淘汰.主要目的就是把最近最少使用的資料移除記憶體,以載入其他資料 原理 有新資料 意味著資料之前沒有被快取過 時,加入到列表頭 快取達到最大容量時,需要淘汰資料多出來的資料,此時淘汰列表尾部的資料 當快取中有資料被命中,則將...
LRU快取機制實現
題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key...
快取 LRU演算法實現
以下是基於雙向鍊錶 hashmap的lru演算法實現,對演算法的解釋如下 設定乙個map存放對應的鍵和值,同時設定乙個雙向鍊錶,來儲存最近最久未使用的關係,如果訪問乙個鍵,鍵存在於map中,訪問完成後,我們在鍊錶中將該鍵刪除,然後將其新增到鍊錶的首部,表示最近剛訪問過這個鍵,當快取滿了後,如果要新增...