Size bir dizi bellek isteği ve önbellek boyutu verilecektir. Herhangi bir önbellek değiştirme stratejisi altında mümkün olan en az sayıda önbellek kaybını döndürmelisiniz.
Optimal bir strateji, isterseniz Belady'nin algoritmasıdır .
Önbellek sistemi aşağıdaki gibi çalışır: Önbellek boş başlar. Bellek istekleri gelir. İstek önbellekte bir parça veri isterse, her şey yolunda demektir. Değilse, bir önbellek özledim. Bu noktada, daha sonra kullanılmak üzere önbelleğe istenen verileri ekleyebilirsiniz. Önbellek doluysa ve yeni veri eklemek istiyorsanız, daha önce önbellekte bulunan verileri çıkarmanız gerekir. Yalnızca önbellekte olmayan verileri asla ekleyemezsiniz.
Amacınız, belirli bir bellek isteği dizisi ve önbellek boyutu için mümkün olan minimum önbellek kaçış sayısını bulmaktır.
Size önbellek boyutu, pozitif bir tam sayı ve belirteçlerin listesi olan bellek isteği dizisi verilecektir. Bu jetonlar, en az 256 farklı jeton mümkün olduğu sürece (baytlar iyi, boolslar değil) istediğiniz tür jetonlar olabilir. Örneğin, ints, stringler, listeler gayet iyi. Gerekirse açıklama isteyin.
Test senaryoları:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Bunu başaran bir değiştirme politikası için wikipedia'ya bakın .
2
[0, 1, 2, 0, 1, 0, 1]
3
2
Önbelleğe eklemekten kaçının .
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
Bunu başarmanın bir yolu , son kullanımından sonra asla tahliye etmemek 0
ve mümkün olan en kısa zamanda 2
tahliye etmektir 1
.
Puanlama: Bu kod golfü. En az bayt kazanır.