Vous recevrez une séquence de demandes de mémoire et une taille de cache. Vous devez renvoyer le moins possible d'échecs de cache dans toute stratégie de remplacement de cache.
Une stratégie optimale est l'algorithme de Belady , que vous pouvez utiliser si vous le souhaitez.
Un système de mise en cache fonctionne comme suit: Le cache commence vide. Les demandes de mémoire entrent. Si la demande demande un morceau de données dans le cache, tout va bien. Sinon, vous encourez un échec de cache. À ce stade, vous pouvez insérer les données demandées dans le cache pour une utilisation future. Si le cache était plein et que vous souhaitez insérer de nouvelles données, vous devez supprimer les données qui se trouvaient précédemment dans le cache. Vous ne pouvez jamais insérer de données qui n'étaient pas uniquement dans le cache.
Votre objectif est de trouver le nombre minimum possible de cache manquant pour une séquence de demande de mémoire et une taille de cache données.
Vous recevrez la taille du cache, un entier positif et la séquence de demande de mémoire, qui est une liste de jetons. Ces jetons peuvent être n'importe quel type de jetons que vous aimez, tant qu'au moins 256 jetons différents sont possibles (les octets sont bons, les bools ne le sont pas). Par exemple, les entiers, les chaînes, les listes sont très bien. Demandez des éclaircissements si nécessaire.
Cas de test:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Voir wikipedia pour une politique de remplacement qui y parvient.
2
[0, 1, 2, 0, 1, 0, 1]
3
Évitez simplement d'ajouter 2
au cache.
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
Une façon d' y parvenir est de ne jamais expulsant 0
et 2
, et expulsant 1
le plus tôt possible après sa dernière utilisation.
Notation: Il s'agit du code golf. Le moins d'octets gagne.
la source
Réponses:
JavaScript (ES6), 128 octets
Prend l'entrée comme
(size)(list)
.Essayez-le en ligne!
Commenté
Il s'agit d'une implémentation de l'algorithme de Belady.
la source
Perl 5 , 193 octets
Essayez-le en ligne!
193 octets sans retrait, nouvelles lignes, espaces, commentaires:
la source
05AB1E , 20 octets
Essayez-le en ligne!
la source
Haskell , 82 octets
Essayez-le en ligne!
Explication
Fonctionne par force brute: toutes les stratégies de cache sont essayées et le meilleur résultat est renvoyé.
la source
Perl 6 , 146 octets
Essayez-le en ligne!
la source