Diese Herausforderung ist wirklich einfach (und ein Vorläufer einer schwierigeren!).
Bei einem Array von Ressourcenzugriffen (einfach durch nichtnegative Ganzzahlen angegeben) und einem Parameter ngeben Sie die Anzahl der Cachefehler zurück, sofern der Cache über Kapazität verfügt nund ein FIFO-Auswurfschema (First-In-First-Out) verwendet, wenn er voll ist .
Beispiel:
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]
In diesem Beispiel gab es also 9 Fehler. Vielleicht hilft ein Codebeispiel, es besser zu erklären. In Python:
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
Einige weitere Testfälle (die einen Hinweis auf die nächste Herausforderung enthalten - etwas Merkwürdiges feststellen?):
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
Kürzester Code in Bytes gewinnt.


notice anything curious?eine Weile angesehen ... und gerade bemerkt, dass das Erhöhen der Cache-Kapazität nicht unbedingt die Anzahl der Fehler verringert ?!