Python-курс
🧮 Динамическое программирование

Мемоизация: сверху вниз

Перекрывающиеся подзадачи и кэш результатов.

~30 минПродвинутый 2 урока

Зачем нужно ДП

Динамическое программирование (ДП) — это приём для задач, которые распадаются на перекрывающиеся подзадачи. Идея проста: если одну и ту же подзадачу приходится решать много раз, посчитайте её один раз и сохраните ответ. Это превращает «медленный» экспоненциальный перебор в быстрый линейный.

Классический пример боли — наивные числа Фибоначчи. fib(n) = fib(n-1) + fib(n-2) пересчитывает одни и те же значения снова и снова, и для n=40 уже заметно тормозит. Посмотрим, почему.

f5 f4 f3 f3 f2 f2 f1 f1 f0 f1
f3 считается дважды, f2 — трижды. Подзадачи перекрываются.
fib-slow.py
Шаг 1 из 7