Я хотел бы знать, в чем на самом деле разница между caching
и memoization
.
На мой взгляд, оба варианта подразумевают отказ от повторных вызовов функций для получения данных путем их сохранения .
В чем основная разница между ними?
Я хотел бы знать, в чем на самом деле разница между caching
и memoization
.
На мой взгляд, оба варианта подразумевают отказ от повторных вызовов функций для получения данных путем их сохранения .
В чем основная разница между ними?
Ответы:
Мемоизация - это особая форма кэширования, которая включает в себя кеширование возвращаемого значения функции на основе ее параметров .
Кэширование - это более общий термин; например, HTTP-кеширование - это кеширование, но не мемоизация.
Википедия говорит :
Несмотря на то, что мемоизация связана с кэшированием, она относится к конкретному случаю этой оптимизации, отличая ее от таких форм кэширования, как буферизация или замена страниц.
If-Match
и истечения срока действия. Мемоизация имеет смысл только для чистой функции, что редко бывает с HTTP.
Как я видел, «мемоизация» - это «кэширование результата детерминированной функции», который может быть воспроизведен в любое время с той же функцией и входными данными.
«Кэширование» включает в себя практически любую стратегию буферизации вывода, независимо от того, воспроизводимо ли исходное значение в данный момент времени. Фактически, кэширование также используется для обозначения стратегий буферизации ввода , таких как кэш записи на диске или в памяти. Так что это гораздо более общий термин.
Я думаю, что термин кэширование обычно используется, когда вы храните результаты операций ввода-вывода или в основном любые данные, которые приходят к вам извне (файлы, сеть, запросы к базе данных). Мемоизация терминов обычно применяется к хранению результатов ваших собственных вычислений, например, в контексте динамического программирования.
Мемоизация - это особая форма кэширования результата детерминированной функции. Это означает, что кеширование результата вне функции не является мемоизацией, потому что функция должна будет изменять кеш при вычислении нового результата (еще не находящегося в кеше), чтобы она больше не была (чистой) функцией. Мемоизация обычно подразумевает передачу кеша в качестве дополнительного аргумента (во вспомогательной функции). Мемоизация оптимизирует функции, которым необходимо вычислять значения несколько раз за один доступ. Кэширование оптимизирует функции, которые вызываются несколько раз с одними и теми же параметрами. Другими словами, Memoization оптимизирует первый доступ независимо от того, будет ли кэширование оптимизировать только повторяющиеся обращения.