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.
quelle
Antworten:
JavaScript (ES6), 128 Byte
Übernimmt die Eingabe als
(size)(list)
.Probieren Sie es online!
Kommentiert
Dies ist eine Implementierung von Beladys Algorithmus.
quelle
Perl 5 , 193 Bytes
Probieren Sie es online!
193 Bytes ohne Einrückung, Zeilenumbrüche, Leerzeichen, Kommentare:
quelle
05AB1E , 20 Bytes
Probieren Sie es online!
quelle
Haskell , 82 Bytes
Probieren Sie es online!
Erläuterung
Funktioniert mit brachialer Gewalt: Alle Cache-Strategien werden ausprobiert und das beste Ergebnis wird zurückgegeben.
quelle
Perl 6 , 146 Bytes
Probieren Sie es online!
quelle