コンピュータの理論の実践_LRUキャッシュ置換アルゴリズム_ノート

 

 

 

- * -エンコーディング= UTF-8 - * - 

から DoubleLinkedList インポートDoubleLinkedList、ノード


クラスLRUcache(オブジェクト):
     デフ __init__ (自己容量):
        self.capacity = 容量
        self.map = {} 
        self.list = DoubleLinkedList(自己。容量)

    デフのget(自己、キー):
         もしキーself.map:
            ノード = self.map.get(キー)
            self.list.remove(ノード)
            self.list.append_front(ノード)
            の戻りnode.value
        リターン -1 DEFのPUT(セルフ、キー、値):
        キーは、すでにキャッシュ内にある新しい値に更新する必要があり、リストヘッダ内のキーと値のペアの組み合わせ、およびマップに値を更新した場合IFキーself.mapは:
            ノード = self.map.get(キー)
            self.list.remove(ノード)
            node.value = 
            self.list.append_front(ノード)#のキーがキャッシュにない
            ノード = ノード(キー、値)
             IF self.list.size> = self.capacity:  キャッシュフィル 
                old_node = self.list.remove()  

    
        

        
        デフォルトの削除ノード末尾
                デルself.map [old_node.key] 
                self.list.append_front(ノード)
                self.map [キー] = ノード
                 self.list.size - #1 =動作のサイズを一覧表示する必要はありません。
            
                self.list.append_front(ノード)
                self.map [キー] = ノード
                 self.list.size 1 =#+動作の大きリストアップする必要はありません。

    DEF  印刷(セルフ): プリントバッファの内容を 
        self.list。印刷)(


IF  __name__ == ' __main__ ' 
    キャッシュ= LRUcache(2 
    cache.put( 1、1 
    キャッシュ。印刷()
    cache.put( 2、2 
    キャッシュ。印刷()
    cache.put( 3、3 
    キャッシュ。印刷()
     プリント(cache.get(1 ))
    キャッシュ。印刷()
     プリント(cache.get(2 ))
    のキャッシュ。印刷()
     プリント(cache.get(3 ))
    のキャッシュ。印刷()

 

おすすめ

転載: www.cnblogs.com/pfcz1/p/11805779.html