Sie erhalten eine Folge von Speicheranforderungen und eine Cache-Größe. Sie müssen die geringstmögliche Anzahl von Cache-Fehlern unter einer Cache-Ersetzungsstrategie zurückgeben.
Eine optimale Strategie ist Beladys Algorithmus , den Sie verwenden können, wenn Sie möchten.
Ein Cachesystem funktioniert folgendermaßen: Der Cache beginnt leer. Speicheranforderungen kommen herein. Wenn die Anforderung nach einem Datenelement im Cache fragt, ist alles in Ordnung. Andernfalls tritt ein Cache-Fehler auf. An dieser Stelle können Sie die angeforderten Daten zur späteren Verwendung in den Cache einfügen. Wenn der Cache voll war und Sie neue Daten einfügen möchten, müssen Sie die zuvor im Cache befindlichen Daten löschen. Sie dürfen niemals Daten einfügen, die sich nicht nur im Cache befanden.
Ihr Ziel ist es, die minimal mögliche Anzahl von Cache-Fehlern für eine bestimmte Speicheranforderungssequenz und Cache-Größe zu finden.
Sie erhalten die Cachegröße, eine positive Ganzzahl und die Speicheranforderungssequenz, bei der es sich um eine Liste von Tokens handelt. Diese Token können jede Art von Token sein, die Sie mögen, solange mindestens 256 verschiedene Token möglich sind (Bytes sind in Ordnung, Bools nicht). Zum Beispiel sind Ints, Strings und Listen in Ordnung. Bitten Sie bei Bedarf um Klärung.
Testfälle:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Eine entsprechende Ersatzrichtlinie finden Sie in Wikipedia .
2
[0, 1, 2, 0, 1, 0, 1]
3
Vermeiden Sie einfach das Hinzufügen 2
zum Cache.
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
Eine Möglichkeit, dies zu erreichen, besteht darin, niemals 0
und so bald wie möglich nach seiner letzten Verwendung zu 2
vertreiben 1
.
Wertung: Dies ist Codegolf. Wenigste Bytes gewinnt.