Вам буде надана послідовність запитів на пам'ять та розмір кешу. Ви повинні повернути найменшу кількість можливих пропусків кешу в рамках будь-якої стратегії заміни кешу.
Оптимальною стратегією є алгоритм Беладі , який ви можете використовувати, якщо хочете.
Система кешування працює так: Кеш починає порожнім. Надходять запити на пам'ять. Якщо запит запитує частину даних у кеші, все добре. Якщо ні, то ви маєте пропустити кеш. У цей момент ви можете вставити дані, які були запитуні, у кеш для подальшого використання. Якщо кеш був повний і ви хочете вставити нові дані, ви повинні вилучити дані, які раніше були в кеші. Ви ніколи не можете вставляти дані, які були не просто в кеші.
Ваша мета - знайти мінімально можливу кількість пропусків кешу для заданої послідовності запитів пам'яті та розміру кешу.
Вам буде надано розмір кешу, додатне ціле число та послідовність запитів на пам'ять, що є списком лексем. Ці жетони можуть бути будь-якими типами жетонів, якщо вам подобається щонайменше 256 різних жетонів (байти - це добре, булі - ні). Наприклад, вставки, рядки, списки все добре. За необхідності попросіть роз'яснення.
Тестові приклади:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Дивіться у wikipedia інформацію про політику заміни, яка цього домагається.
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якомога швидше після його останнього використання.
Оцінка: Це гольф з кодом. Виграє найменше байт.