Ce défi est vraiment simple (et un précurseur d'un plus difficile!).
Étant donné un tableau d'accès aux ressources (simplement désigné par des entiers non négatifs) et un paramètre n
, renvoie le nombre d'occurrences manquées dans le cache, à supposer que notre cache ait une capacité suffisante n
et utilise un schéma d'éjection premier entré premier sorti (FIFO) lorsqu'il est plein. .
Exemple:
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]
Donc, dans cet exemple, il y a eu 9 ratés. Peut-être qu'un exemple de code aide à mieux l'expliquer. En 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
Quelques autres cas de test (qui contiennent un indice pour le prochain défi - rien de curieux?):
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
Le code le plus court en octets gagne.
notice anything curious?
depuis un moment ... et je viens de remarquer que l'augmentation de la capacité de la mémoire cache ne diminue pas nécessairement le nombre de ratés?!