Вам будет предоставлена последовательность запросов памяти и размер кэша. Вы должны возвращать как можно меньше пропущенных кешей при любой стратегии замены кеша.
Оптимальной стратегией является алгоритм Белади , который вы можете использовать, если хотите.
Система кеширования работает следующим образом: кеш начинается пустым. Приходят запросы памяти. Если запрос запрашивает часть данных в кеше, все хорошо. Если нет, то вы получаете ошибку кэша. На этом этапе вы можете вставить данные, которые были запрошены в кэш для будущего использования. Если кэш был заполнен, и вы хотите вставить новые данные, вы должны удалить данные, которые ранее были в кеше. Вы никогда не можете вставить данные, которые были не только в кеше.
Ваша цель - найти минимально возможное количество пропусков кеша для заданной последовательности запросов памяти и размера кеша.
Вам будет задан размер кэша, положительное целое число и последовательность запросов памяти, которая представляет собой список токенов. Этими токенами могут быть любые токены, которые вам нравятся, если возможно как минимум 256 различных токенов (байты в порядке, а bools - нет). Например, целые, строки, списки все в порядке. При необходимости попросите разъяснений.
Тестовые случаи:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Посмотрите Википедию для политики замены, которая достигает этого.
2
[0, 1, 2, 0, 1, 0, 1]
3
Просто избегайте добавления 2
в кеш.
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
Один из способов добиться этого, никогда не выселяет 0
и 2
, и выселять 1
как можно скорее после его последнего использования.
Подсчет очков: это код гольф. Побеждает несколько байтов.
источник
Ответы:
JavaScript (ES6), 128 байт
Принимает вход как
(size)(list)
.Попробуйте онлайн!
комментарии
Это реализация алгоритма Белади.
источник
Perl 5 , 193 байта
Попробуйте онлайн!
193 байта без отступа, новых строк, пробелов, комментариев:
источник
05AB1E , 20 байтов
Попробуйте онлайн!
источник
Haskell , 82 байта
Попробуйте онлайн!
объяснение
Работает грубой силой: все стратегии кеширования опробованы, и возвращается лучший результат.
источник
Perl 6 , 146 байт
Попробуйте онлайн!
источник