В чем разница между запоминанием и динамическим программированием?
Заметка - это термин, описывающий метод оптимизации, при котором вы кешируете ранее вычисленные результаты и возвращаете кешированный результат, когда снова нужны те же вычисления.
Динамическое программирование - это методика решения задач рекурсивного характера, итеративная, и она применима, когда вычисления подзадач перекрываются.
Динамическое программирование обычно реализовано с использованием табуляции, но также может быть реализовано с использованием мемоизации. Итак, как вы можете видеть, ни один из них не является «подмножеством» другого.
Разумный дополнительный вопрос: В чем разница между табулированием (типичная техника динамического программирования) и запоминанием?
Когда вы решаете задачу динамического программирования с использованием табуляции, вы решаете проблему " снизу вверх ", т. Е. Сначала решая все связанные подзадачи, обычно заполняя n стол. На основании результатов, приведенных в таблице, затем вычисляется решение "верхней" / исходной проблемы.
Если вы используете памятку для решения проблемы, вы делаете это, поддерживая карту уже решенных подзадач. Вы делаете это " сверху вниз " в том смысле, что сначала вы решаете "верхнюю" проблему (которая обычно повторяется вниз для решения подзадач).
Хороший слайд из здесь (ссылка сейчас не работает, хотя слайд еще хорош):
- Если все подзадачи должны быть решены хотя бы один раз, алгоритм динамического программирования снизу вверх обычно превосходит запоминаемый алгоритм сверху вниз с постоянным коэффициентом
- Нет накладных расходов на рекурсию и меньше накладных расходов на ведение таблицы
- Существуют некоторые проблемы, для которых можно использовать регулярную схему доступа к таблицам в алгоритме динамического программирования, чтобы еще больше сократить время или пространство
- Если некоторые подзадачи в пространстве подзадач вообще не нужно решать, запоминаемое решение имеет преимущество в том, что решает только те подзадачи, которые определенно необходимы
Дополнительные ресурсы:
Это было переписано как статья здесь .