1. 程式人生 > >LRU、LFU、FIFO演算法總結

LRU、LFU、FIFO演算法總結

一、概述

(1)FIFO:First In First Out,先進先出
(2)LRU:Least Recently Used,最近最少使用
(3)LFU:Least Frequently Used,最不經常使用

FIFO表示先進先出,類似於對列,在資料的結構上使用對列來實現。 結構圖:
1. 新訪問的資料插入FIFO佇列尾部,資料在FIFO佇列中順序移動;
2. 淘汰FIFO佇列頭部的資料;
LRU表示很少使用演算法,其核心思想是“如果資料最近被訪問過,那麼將來被訪問的機率也更高”。
最常見的實現是使用一個連結串列儲存快取資料,結構圖如下:

1. 新資料插入到連結串列頭部;
2. 每當快取命中(即快取資料被訪問),則將資料移到連結串列頭部;
3. 當連結串列滿的時候,將連結串列尾部的資料丟棄。
 LRU和LFU的區別: LFU演算法是根據在一段時間裡資料項被使用的次數選擇出最少使用的資料項,即根據使用次數的差異來決定。而LRU是根據使用時間的差異來決定的。
LFU表示最不經常使用的演算法,其核心思想是“如果資料過去被訪問多次,那麼將來被訪問的頻率也更高”。
結構圖:
1. 新加入資料插入到佇列尾部(因為引用計數為1);
2. 佇列中的資料被訪問後,引用計數增加,佇列重新排序;
3. 當需要淘汰資料時,將已經排序的列表最後的資料塊刪除。
參考:http://blog.csdn.net/quitepig/article/details/8045187 http://flychao88.iteye.com/blog/1977653
  
http://www.cnblogs.com/dolphin0520/p/3749259.html