內容:記錄以前秋招被面試官問過如何實現lru,今天再看到一樣的面試題,再實現一次。
思路:
**:1、使用到的stl容器為:list和unordered_map
2、unordered_map是c++
11 引入的新容器,不同於map用紅黑樹實現,unordered_map用雜湊表實現
3、實現lru思路就是要淘汰的時候或者被訪問了的時候,要刪除或者更新位置時不能去遍歷,否則效率極低。
比如:當乙個key被訪問時,需要放到隊頭,但是你並不知道這個key在資料中的**,所以需要用乙個
雜湊表來記錄,這個雜湊表的key就是資料的key,value是資料在資料容器中的迭代器。這樣就可以使
得更新與淘汰的時間複雜度在o(1
)
class lru
intget
(int key)
int result =
(*index[key]
).second;
data.
erase
(index[key]);
data.
push_front()
; index[key]
= data.
begin()
;//��ҫ����,�ǵ�list��begin����front
return result;
}int
put(
int key,
int value)if(
get(key)!=-
1)if(index.
size()
>= size)
data.
push_front()
; index[key]
= data.
begin()
;return0;
}};
LRU簡單實現C
頁面置換演算法 在位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。下面是lru簡單實現 雙向鍊錶,時間複雜度o n include i...
LRU演算法C 實現
lru演算法 leaset recently used 或者說快取排程演算法。對於軟體層面實現的快取來說,其主要針對的是對磁碟上具有結構性組織的大型檔案資料的隨機讀取。如果程式需要從磁碟上某個存放了一億條資料的檔案中讀取id 的某條資料,並且這條資料會被多次訪問到 很好的滿足區域性性原理 如果每次都...
c 實現LRU演算法
lru演算法 least recently used 是記憶體管理中為了保證命中率的一種頁面置換演算法,可用於記憶體和輔存之間也可用用在cache和記憶體之間,redis中的過期淘汰策略中也使用了lru演算法。它是利用了程式區域性性的原理,簡單說就是此刻訪問的頁面很可能在下一時刻也會訪問。這裡使用c...