讀書筆記 漫畫演算法 8 LRU快取的實現

2021-09-29 12:36:19 字數 1955 閱讀 7026

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 的最小元素...