Bu zorluk gerçekten basittir (ve daha zor olanın öncüsüdür!).
Bir dizi kaynak erişimi (yalnızca negatif olmayan tamsayılarla belirtilir) ve bir parametre nverildiğinde, önbelleğimizin kapasiteye sahip olduğunu nve ilk dolduğunda ilk giren ilk (FIFO) ejeksiyon şemasını kullandığını varsayarsa, önbellek sayısını geri döndürür. .
Örnek:
4, [0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 0, 1, 2, 3]
0 = not in cache (miss), insert, cache is now [0]
1 = not in cache (miss), insert, cache is now [0, 1]
2 = not in cache (miss), insert, cache is now [0, 1, 2]
3 = not in cache (miss), insert, cache is now [0, 1, 2, 3]
0 = in cache (hit), cache unchanged
1 = in cache (hit), cache unchanged
2 = in cache (hit), cache unchanged
3 = in cache (hit), cache unchanged
4 = not in cache (miss), insert and eject oldest, cache is now [1, 2, 3, 4]
0 = not in cache (miss), insert and eject oldest, cache is now [2, 3, 4, 0]
0 = in cache (hit), cache unchanged
1 = not in cache (miss), insert and eject oldest, cache is now [3, 4, 0, 1]
2 = not in cache (miss), insert and eject oldest, cache is now [4, 0, 1, 2]
3 = not in cache (miss), insert and eject oldest, cache is now [0, 1, 2, 3]
Yani bu örnekte 9 özledim. Belki bir kod örneği daha iyi açıklamaya yardımcı olur. Python'da:
def num_misses(n, arr):
misses = 0
cache = []
for access in arr:
if access not in cache:
misses += 1
cache.append(access)
if len(cache) > n:
cache.pop(0)
return misses
Bazı ileri test sınavları (bir sonraki yarışmaya ilişkin bir ipucu içeren - meraklı bir şey farkettiniz mi?):
0, [] -> 0
0, [1, 2, 3, 4, 1, 2, 3, 4] -> 8
2, [0, 0, 0, 0, 0, 0, 0] -> 1
3, [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4] -> 9
4, [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4] -> 10
Bayt cinsinden en kısa kod kazanır.


notice anything curious?Bir süredir son ifadeye bakıyordum ... ve farkettim ki, önbellek kapasitesini arttırmak, özlüyor sayılarınızı düşürmek zorunda değil mi ?!