lru = least recently used,最近最少使用
使用的資料結構:鍊錶,雜湊表
使用的程式語言:swift
當有新資料時,先從頭開始遍歷鍊錶
如果資料沒在快取中,再次分為兩種情況
如果快取空間已滿
此次練習實現lru快取演算法的目的:熟悉鍊錶的**實現,具體實現的是雙向鍊錶
使用鍊錶的同時,也使用了雜湊表:
如果包含雜湊表
使用鍊錶實現的缺點
使用陣列實現的缺點
鍊錶:
// 節點
public class linkedlistnode
}// 雙向鍊錶
class linkedlist: nsobject
// 獲取鍊錶最後乙個元素
public var last: node?
while
let next = node.next
return node
}// 檢查鍊錶是否為空
public var isempty: bool
// 獲取鍊錶的長度
public var count: int
// 迴圈,知道node為nil為止
var count = 1
while
let next = node.next
return count
}// 在指定的index獲取node
public func node(atindex index: int) ->node?
var node = head!.next
guard index < 0 else
for _ in 1..if node == nil
}return node!
}// 在鍊錶尾部插入元素
let newnode = node
iflet lastnode = last else
}// 在鍊錶的頭部插入元素
public func inserttohead(node: node) else
}// 在指定位置插入元素
public func insert(_ node: node, atindex index: int)
let newnode = node
if count == 0 else else
let prev = self.node(atindex: index - 1)
let next = prev?.next
newnode.previous = prev
newnode.next = prev?.next
prev?.next = newnode
next?.previous = newnode}}
}// 刪除全部元素
public func removeall
()
// 刪除最後乙個元素
public func removelast() -> v?
return remove(node: last!)
}// 刪除指定的元素
public func remove(node: node) -> v?
let prev = node.previous
let next = node.next
iflet prev = prev else
next?.previous = prev
node.previous = nil
node.next = nil
return node.value
}// 刪除指定index的元素
public func removeat(_ index: int) -> v?
let node = self.node(atindex: index)
guard node != nil else
return remove(node: node!)
}}複製**
lru快取演算法:
class lrustrategy: nsobject
// swift的下標語法,在這是lrustrategy類雜湊化後,get set的語法糖
subscript (key: k) -> v? else
}set(value) else else
self.queue.inserttohead(node: node)
self.hashtable[key] = node}}
}}
}複製**
python實現LRU快取淘汰
lru least recent used 最近最少使用演算法,主要用於快取淘汰.主要目的就是把最近最少使用的資料移除記憶體,以載入其他資料 原理 有新資料 意味著資料之前沒有被快取過 時,加入到列表頭 快取達到最大容量時,需要淘汰資料多出來的資料,此時淘汰列表尾部的資料 當快取中有資料被命中,則將...
快取淘汰演算法 LRU
1.lru 1.1.原理 lru least recently used,最近最少使用 演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是 如果資料最近被訪問過,那麼將來被訪問的機率也更高 1.2.實現 最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下 1.新資料插入到鍊錶頭部 2....
LRU 快取淘汰演算法
1.介紹 lru是leastrecentlyused近期最少使用演算法。記憶體管理的一種頁面置換演算法,對於在記憶體中但又不用的資料塊 記憶體塊 叫做lru,oracle會根據哪些資料屬於lru而將其移出記憶體而騰出空間來載入另外的資料。lru least recently used,最近最少使用 ...