Участник:Vlad SG — различия между версиями
| Vlad SG (обсуждение | вклад) | Vlad SG (обсуждение | вклад)  | ||
| Строка 1: | Строка 1: | ||
| == Формулировка == | == Формулировка == | ||
| − | Пусть задана последовательность запросов к внешней памяти. Необходимо решить для каждого запроса: сохранить его значение в кэш размера <tex>k</tex> или оставить его во внешней памяти. | + | Пусть задана последовательность из <tex>n</tex> запросов к внешней памяти. Необходимо решить для каждого запроса: сохранить его значение в кэш размера <tex>k</tex> или оставить его во внешней памяти. | 
| == Основные определения == | == Основные определения == | ||
| {{Определение | {{Определение | ||
| |definition= | |definition= | ||
| − | '''Кэш попадание''' (англ. ''cache hit'') {{---}}  результат обрабатываемого запроса уже хранится в кэше и его можно вернуть мгновенно | + | '''Кэш попадание''' (англ. ''cache hit'') {{---}}  результат обрабатываемого запроса уже хранится в кэше и его можно вернуть мгновенно. | 
| }} | }} | ||
| {{Определение | {{Определение | ||
| |definition= | |definition= | ||
| − | '''Кэш промах''' (англ. ''cache miss'') {{---}} результат обрабатываемого запроса отсутствует в кэше и чтобы его получить необходимо обращаться к внешней памяти. При получении ответа мы так же можем сохранить новое значение в кэш, вытеснив(удалив) некоторое старое | + | '''Кэш промах''' (англ. ''cache miss'') {{---}} результат обрабатываемого запроса отсутствует в кэше и чтобы его получить необходимо обращаться к внешней памяти. При получении ответа мы так же можем сохранить новое значение в кэш, вытеснив(удалив) некоторое старое. | 
| }} | }} | ||
| {{Определение | {{Определение | ||
| Строка 25: | Строка 25: | ||
| }} | }} | ||
| {{Определение | {{Определение | ||
| + | |id=def_a-opt | ||
| |definition= | |definition= | ||
| '''<tex>\alpha</tex>-оптимальность''' {{---}} свойство онлайн алгоритма, означающее что время работы этого алгоритма на любых входных данных не более чем в <tex>\alpha</tex> раз больше, чем у любого оффлайнового, с точностью до аддитивной константы.   | '''<tex>\alpha</tex>-оптимальность''' {{---}} свойство онлайн алгоритма, означающее что время работы этого алгоритма на любых входных данных не более чем в <tex>\alpha</tex> раз больше, чем у любого оффлайнового, с точностью до аддитивной константы.   | ||
| }} | }} | ||
| − | ==  | + | == Проблема детерминированных алгоритмов == | 
| {{Теорема | {{Теорема | ||
| + | |about = О нижней оценке | ||
| |statement = | |statement = | ||
| − | + | Любой <tex>\alpha</tex>-оптимальный онлайн детерминированный алгоритм кэширования имеет <tex>\alpha \geqslant k</tex>.   | |
| |proof = | |proof = | ||
| − | + | Обозначим <tex>T_\text{opt}(\sigma)</tex> и <tex>T_\text{det}(\sigma)</tex> как время работы оптимального и детерминированного алгоритма на входе <tex>\sigma</tex>. По определению <tex>\alpha</tex>-оптимальности имеем <tex>\forall\sigma \quad T_\text{det}(\sigma) < \alpha \cdot T_\text{opt}(\sigma) + C</tex>. Покажем, что достаточно построить для любого <tex>n</tex> такую последовательность запросов <tex>\sigma_n</tex>, что <tex>T_\text{det}(\sigma_n) \geqslant k \cdot T_\text{opt}(\sigma_n) + C_0</tex>. Так как <tex>\lim\limits_{n->\infty}T = \infty</tex>, получаем <tex>\lim\limits_{n->\infty}\frac{T_\text{det}(\sigma_n)}{T_\text{opt}(\sigma_n)} \geqslant k</tex>. С другой стороны можно квантор раскрыть для значения <tex>\sigma_n</tex>: <tex>T_\text{det}(\sigma_n) < \alpha \cdot T_\text{opt}(\sigma_n) + C</tex>, а потом снова перейти к пределу <tex>\lim\limits_{n->\infty}\frac{T_\text{det}(\sigma_n)}{T_\text{opt}(\sigma_n)} \leqslant \alpha</tex>. Перепишем неравенства в следующем виде <tex>k \leqslant \lim\limits_{n->\infty}\frac{T_\text{det}(\sigma_n)}{T_\text{opt}(\sigma_n)} \leqslant \alpha</tex>, откуда очевидно, что <tex>\alpha \geqslant k</tex>. | |
| + | |||
| + | Теперь построим <tex>\sigma_n</tex>. В последовательности будем использовать только <tex>k + 1</tex> различных запросов. Первыми <tex>k</tex> запросами возьмём любые различные, а дальше, каждым следующим запросом поставим тот, результата которого нет в данный момент в кэше детерминированного алгоритма. Это хоть и не явное, но корректное задание последовательности, потому что имея алгоритм, мы можем вычислить каждый запрос в <tex>\sigma_n</tex> на основе предыдущих. Очевидно, что <tex>T_\text{det}(\sigma_n) = n</tex>. | ||
| + | |||
| + | Посмотрим как на <tex>\sigma_n</tex> будет работать следующий, возможно оптимальный оффлайн алгоритм (индекс mopt). Первые k элементов алгоритм добавит в кэш, так как они все различные. Когда случается промах, алгоритм среди значений в кэше и только что обработанного результата вытесняет то, которое в последующих запросах встречается первый раз как можно позже или не встречается совсем. При таком выборе, следующий кэш промах случится не менее чем через <tex>k</tex> запросов. Предположим, что это не так, и кэш промах случился через <tex>m < k</tex> запросов. Так как количество различных запросов на 1 больше размера кэша, то этот промах произошёл на запросе, который мы вытеснили из кэша в предыдущий раз. Из <tex>m < k</tex> следует, что есть запросы, которые мы не встретили среди первых <tex>m</tex>, а значит их первое вхождение будет после того значения, которое мы вытеснили. Получили противоречие, а значит предположение не верно. Оценим время работы возможно оптимального оффлайн алгоритма <tex>T_\text{mopt} \leqslant k + \lceil\frac{n-k}{k+1}\rceil \leqslant \frac{n}{k}</tex>. Последнее неравенство выполнено, т.к. <tex>n >> k</tex>. Очевидно <tex>T_\text{opt}(\sigma_n) \leqslant T_\text{mopt}(\sigma_n)</tex>, откуда <tex>T_\text{opt}(\sigma_n) \leqslant \frac{n}{k}</tex> | ||
| + | |||
| Теорема доказана. | Теорема доказана. | ||
| Строка 40: | Строка 47: | ||
| − | ==  | + | == Вероятностный алгоритм == | 
| == Источники == | == Источники == | ||
Версия 05:25, 27 января 2022
Содержание
Формулировка
Пусть задана последовательность из запросов к внешней памяти. Необходимо решить для каждого запроса: сохранить его значение в кэш размера или оставить его во внешней памяти.
Основные определения
| Определение: | 
| Кэш попадание (англ. cache hit) — результат обрабатываемого запроса уже хранится в кэше и его можно вернуть мгновенно. | 
| Определение: | 
| Кэш промах (англ. cache miss) — результат обрабатываемого запроса отсутствует в кэше и чтобы его получить необходимо обращаться к внешней памяти. При получении ответа мы так же можем сохранить новое значение в кэш, вытеснив(удалив) некоторое старое. | 
| Определение: | 
| Временем работы алгоритма кэширования будем называть количество кэш промахов случившихся при обработке всех запросов. | 
При анализе случайных алгоритмов будем использовать матожидание количества кэш промахов при всех возможных случайных выборах, но для фиксированной последовательности запросов.
| Определение: | 
| Онлайн алгоритм (англ. on-line algorithm) — алгоритм, который при обработке запроса не знает следующих запросов. | 
| Определение: | 
| Оффлайн алгоритм (англ. off-line algorithm) — алгоритм, которому на вход даются все запросы сразу. | 
| Определение: | 
| -оптимальность — свойство онлайн алгоритма, означающее что время работы этого алгоритма на любых входных данных не более чем в раз больше, чем у любого оффлайнового, с точностью до аддитивной константы. | 
Проблема детерминированных алгоритмов
| Теорема (О нижней оценке): | 
| Любой -оптимальный онлайн детерминированный алгоритм кэширования имеет . | 
| Доказательство: | 
| Обозначим и как время работы оптимального и детерминированного алгоритма на входе . По определению -оптимальности имеем . Покажем, что достаточно построить для любого такую последовательность запросов , что . Так как , получаем . С другой стороны можно квантор раскрыть для значения : , а потом снова перейти к пределу . Перепишем неравенства в следующем виде , откуда очевидно, что . Теперь построим . В последовательности будем использовать только различных запросов. Первыми запросами возьмём любые различные, а дальше, каждым следующим запросом поставим тот, результата которого нет в данный момент в кэше детерминированного алгоритма. Это хоть и не явное, но корректное задание последовательности, потому что имея алгоритм, мы можем вычислить каждый запрос в на основе предыдущих. Очевидно, что . Посмотрим как на будет работать следующий, возможно оптимальный оффлайн алгоритм (индекс mopt). Первые k элементов алгоритм добавит в кэш, так как они все различные. Когда случается промах, алгоритм среди значений в кэше и только что обработанного результата вытесняет то, которое в последующих запросах встречается первый раз как можно позже или не встречается совсем. При таком выборе, следующий кэш промах случится не менее чем через запросов. Предположим, что это не так, и кэш промах случился через запросов. Так как количество различных запросов на 1 больше размера кэша, то этот промах произошёл на запросе, который мы вытеснили из кэша в предыдущий раз. Из следует, что есть запросы, которые мы не встретили среди первых , а значит их первое вхождение будет после того значения, которое мы вытеснили. Получили противоречие, а значит предположение не верно. Оценим время работы возможно оптимального оффлайн алгоритма . Последнее неравенство выполнено, т.к. . Очевидно , откуда 
 | 
