メモリリクエストのシーケンスとキャッシュサイズが与えられます。キャッシュ置換戦略では、キャッシュミスの数をできるだけ少なくする必要があります。
最適な戦略は、Beladyのアルゴリズムです。これは、必要に応じて使用できます。
キャッシングシステムは次のように機能します。キャッシュは空から始まります。メモリ要求が入ります。要求がキャッシュ内のデータの一部を要求する場合、すべてが順調です。そうでない場合、キャッシュミスが発生します。この時点で、将来使用するために要求されたデータをキャッシュに挿入できます。キャッシュがいっぱいで、新しいデータを挿入する場合は、以前にキャッシュにあったデータを削除する必要があります。キャッシュ内だけではないデータを挿入することはできません。
あなたの目標は、特定のメモリリクエストシーケンスとキャッシュサイズについて、キャッシュミスの最小数を見つけることです。
キャッシュサイズ、正の整数、およびトークンのリストであるメモリ要求シーケンスが提供されます。これらのトークンは、少なくとも256個の異なるトークンが可能な限り、どのような種類のトークンでもかまいません(バイトは問題ありませんが、ブールはできません)。たとえば、int、string、listはすべて問題ありません。必要に応じて説明を求めてください。
テストケース:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
これを実現する代替ポリシーについては、ウィキペディアを参照してください。
2
[0, 1, 2, 0, 1, 0, 1]
3
2キャッシュへの追加を避けるだけです。
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
これを達成する1枚の方法は、追い出したことがないことである0と2し、立ち退か1その最後の使用後は、できるだけ早く。
得点:これはコードゴルフです。少ないバイトが勝ちます。