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

 

 

 

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

DoubleLinkedList 輸入DoubleLinkedList、ノード


クラスFIFOCache(オブジェクト):
     デフ __init__ (自己、容量):
        self.capacity = 容量
        self.size = 0
        self.map = {}   マップのマッピングを意味:あなたが作成したことを示します以来、オブジェクトのちょうど束が、彼らはそれがエンドツーエンド属性
                        リンクリストクラスを、リストはNodeクラスを管理するために使用され、それが困難です私は、キーマッピングリストに元祖の追加することを選んだので、一つのノードを探す
                        ノードをマッピングするための鍵でキーと値のペアを使用して、ノードはリスト管理が容易にそれを作る、(キー、値)を持つ
                        位にpythonでこれを配列ではない、と呼ばれるタプルは、D = {KEY1:値1、KEY2 :値2} キー値ペアに格納され 
        self.list = DoubleLinkedList(self.capacity)

    DEF(自己、キー)GET:  キャッシュ内の値ではない
        IFキーない self.map:
             リターン -1
         
            ノード = self.map.get(キー)
             リターンnode.value

    デフ入れ(自己、キー、値):
         もし self.capacity == 0:
             リターン

        IFキー self.map:  バッファ内の既に場合 
            、ノード= self.map.get(キー)   #の値にボタン
            self.list.remove(ノード)
            node.value = 
            self.list.append(ノード)

        キャッシュにない
            IF self.size == self.capacity:  キャッシュがいっぱいです 
                ノード= self.list.pop()
                 デルself.map [node.key]
                self.size - = 1つの
            ノード = ノード(キー、値)
            self.list.append(ノード)
            self.map [キー] =ノードxにキー= xと値= Y:Yは、{=尾マップの形で添加される}元祖
            self.size + = 1

    DEF  印刷(セルフ):  キャッシュ内のデータを表示するには、テストが使用しています 
        self.listを。印刷()


もし __name__ == ' __main__ ' 
    キャッシュ = FIFOCache(2 
    cache.put( 1,1 
    キャッシュ。印刷()
    cache.put( 2,2 
    キャッシュ。プリント()
     プリント(cache.get(1 ))
    cache.put( 3,3 
    キャッシュ。プリント()
     プリント(cache.get(2 ))
    cache.put( 4,4 
    キャッシュ。プリント()
     プリント(cache.get(1))

 

おすすめ

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