Swift實現LRU快取淘汰演算法

2021-09-24 06:45:49 字數 2321 閱讀 1642

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,最近最少使用 ...