Динамічне програмування – метод, який використовується в комп’ютерній наукі для вирішення складних проблем, розбиття їх у прості субпроблеми. Особливо ефективно для оптимізації проблем і проблем з перекриттям підпроблем і оптимальним підструктурою. Реалізація динамічного програмування передбачає вибір відповідних методів, виконання обчислень ефективно, розуміння поширених випадків використання.

Методика динамічного програмування

Є два основні підходи до динамічного програмування: топ-заглушення та дноутворення. Підхід верхнього відліку використовує мемоізацію для зберігання результатів підпроблем при рецидивуванні, уникаючи надмірних обчислень. Підхід до нижньої частини створює рішення, що ітераторно з найменших підпроблем, заповнення таблиці для досягнення кінцевої відповіді.

Розрахунок та реалізація

Реалізація динамічного програмування вимагає визначення стану, який являє собою підпроблемну, і переходу, яка описує, як компмонтувати рішення для держави з попередніх станів. Зазвичай таблиця або масив використовується для зберігання проміжних результатів. Процвітання і граничні умови є важливим для коректних обчислень.

Загальні випадки використання

  • Найсвіжіші алгоритми шляху, такі як Джикстра та Флоудд-Варшалл
  • Knapsack проблеми варіації
  • Вирівнювання акции в біоінформатиці
  • Оптимальні бінарні пошукові дерева
  • Проблеми з змінами монет