lru,least recently used,最近最少使用;一種資源管理演算法
按照字面的意思,也可以理解為快取淘汰
演算法:最近最少訪問的資源,我們就從快取中淘汰出去,以免長時間占用記憶體且不經常訪問;
首先,我們定義基礎的資料結構:
public
class
lrucache
}// 用於高效訪問的hashmap
private map
map =
newhashmap
<
>()
;// 閾值,限制資源在記憶體中的數量
private
int limit;
// ------------- 維護乙個雙向鍊錶
// 煉表頭節點
private node head;
// 鍊錶尾節點
private node tail;
public
lrucache
(int limit)
}
下面我們定義外界訪問的基礎方法:
// 對外呼叫的put函式,用來向快取中存入資料(或者更新)
public
void
put(string key, string value)
;// 外部呼叫函式,獲取以key為鍵的值
public string get
(string key)
;// 外部呼叫的函式,用來移除給定的key節點
public
void
remove
(string key)
;
下面是方法的實現:
/**
* 對外呼叫的put函式,用來向快取中存入資料(或者更新)
* @param key
* @param value
*/public
void
put(string key, string value)
}else
addnode
(node);}
/*** 外部呼叫函式,獲取以key為鍵的值
* @param key
* @return
*/public string get
(string key)
string value = node.value;
removenode
(node)
;addnode
(node)
;return value;
}/**
* 外部呼叫的函式,用來移除給定的key節點
* @param key
*/public
void
remove
(string key)
其中涉及到幾個子方法:
removenode(node); 從鍊錶中刪除節點
addnode(node); 新增節點到鍊錶尾部
private
void
removenode
(node node)
if(node == head)
}else
if(node == tail)
}else
tmp = tmp.next;}}
map.
remove
(node.key);}
private
void
addnode
(node node)
else
map.
put(node.key, node)
;}
讀書筆記 漫畫演算法 9 A 尋路演算法
a 尋路演算法的講解,這裡有介紹比較清晰的文章 首先引入兩個集合,乙個公式 演算法執行的大致步驟如下 下面是a 演算法的完整實現,並帶有測試用例 a 演算法 啟發式搜尋 首先引入兩個集合,乙個公式 openlist 可到達的格仔 closelist 已到達的格仔 f g h 每乙個格仔都有三個屬性值...
第8章 高效演算法設計讀書筆記
演算法分析初步 8.1.1 漸進時間複雜度 最大連續和,給出乙個序列,找到i,j使連續和盡量大 使用列舉思想 列舉每乙個可能的序列首和序列尾 for i 1 i n i if sum best best sum 8.1.2 上界分析 三重迴圈,最壞情況下內層迴圈需要n次,故t n o n的3次方 上...
讀書筆記 漫畫演算法 6 尋找全排列的下乙個數
給出乙個數,求出由每位數形成的所有全排列中,大於此數的最小值 注 我們給出的這個數每位都不同 具體的演算法描述如下 1.從後向前尋找逆序區域,並返回逆序區域的最左側索引 2.將nums index 1 與nums區間 index,nums.length 1 中大於nums index 1 的最小元素...