Динамічне програмування: Фібоначчі, рюкзак і мемоїзація
Коротко: Динамічне програмування розв’язує задачі з підзадачами, що перекриваються, зберігаючи проміжні результати замість їх повторного обчислення; так експоненційні обчислення стають поліноміальними.
Докладніше: Якщо рекурсивний розв’язок знову і знову розв’язує одні й ті самі підзадачі, результати зберігають. Два способи: мемоїзація (згори донизу: рекурсія + кеш) і табуляція (знизу догори: заповнення таблиці).
Подробиці
Приклад: Фібоначчі
`fib(n) = fib(n−1) + fib…
Див. також: рекурсія, жадібні алгоритми, О-нотація