Глосарій

Динамічне програмування

Динамічне програмування (DP) — техніка оптимізації рекурсивних алгоритмів: результати підзадач кешуються, щоб не обчислювати їх повторно. Перетворює задачі з O(2ⁿ) на O(n) або O(n²).

Дві підходи

Числа Фібоначчі

// Без DP: O(2^n)
fib(n) = fib(n-1) + fib(n-2)

// З мемоізацією: O(n)
$memo = [];
function fib(int $n): int {
  global $memo;
  if ($n <= 1) return $n;
  return $memo[$n] ??= fib($n-1) + fib($n-2);
}

Коли застосовувати

Задача має оптимальну підструктуру (оптимальне рішення складається з оптимальних підрішень) і підзадачі що перетинаються. Класичні задачі: найдовша спільна підпослідовність, задача про рюкзак, мінімальний шлях у графі.