В чем разница между кэшированием и запоминанием? - PullRequest
95 голосов
/ 24 июня 2011

Я хотел бы знать, какова фактическая разница между caching и memoization.
На мой взгляд, оба включают избегая повторных вызовов функций для получения данных путем их хранения .

Какая разница между ними?

Ответы [ 5 ]

92 голосов
/ 24 июня 2011

Мемоизация - это особая форма кэширования, которая включает в себя кэширование возвращаемого значения функции на основе ее параметров.

Кэширование - более общий термин; Например, HTTP-кеширование - это кеширование, а не запоминание.

Википедия говорит :

Несмотря на то, что мемоизация относится к конкретному случаю этой оптимизации, она отличается от форм кэширования, таких как буферизация или замена страницы.

39 голосов
/ 24 июня 2011

Как я видел, как они используются, «запоминание» - это «кэширование результата детерминированной функции», которая может быть воспроизведена в любое время при той же самой функции и входных данных.стратегия буферизации, независимо от того, воспроизводится ли исходное значение в данный момент времени.Фактически, кеширование также используется для обозначения стратегий буферизации input , таких как кэш записи на диске или в памяти.Так что это гораздо более общий термин.

6 голосов
/ 24 июня 2011

Я думаю, что термин кэширование обычно используется, когда вы сохраняете результаты операций ввода-вывода, или, в основном, любые данные, которые приходят к вам извне (файлы, сеть, запросы к БД). Термин запоминание обычно применяется для хранения результатов ваших собственных вычислений, например, в контексте динамического программирования.

1 голос
/ 03 сентября 2014

Мемоизация - это особая форма кэширования результата детерминированной функции.Это означает, что кэширование результата вне функции не является запоминанием, потому что функция должна будет изменять кэш при вычислении нового результата (еще не в кеше), чтобы она больше не была (чистой) функцией.Мемоизация обычно подразумевает передачу кеша в качестве дополнительного аргумента (во вспомогательной функции).Мемоизация оптимизирует функции, которые должны вычислять значения несколько раз для одного доступа.Кэширование оптимизирует функции, которые вызываются несколько раз с одинаковыми параметрами.Другими словами, Memoization оптимизирует первый доступ, если кеширование только оптимизирует периодические обращения.

0 голосов
/ 03 января 2019

Я хотел бы добавить к другим замечательным ответам, что памятка также известна как табулирование . Я думаю, что также важно знать этот термин для тех, кто изучает, что такое запоминание и кэширование.

...