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