Я деякий час працюю над динамічним програмуванням. Канонічний спосіб оцінювання динамічної рекурсії програмування - це створення таблиці всіх необхідних значень і заповнення її рядком за рядком. Дивіться, наприклад, Cormen, Leiserson et al: "Вступ до алгоритмів" для вступу.
Я зосереджуюсь на табличній обчислювальній схемі у двох вимірах (заповнення по рядках) та досліджую структуру залежностей комірок, тобто які комірки потрібно зробити, перш ніж можна обчислити іншу. Позначимо з набір показників комірок, від яких залежить клітина i . Зауважте, що Γ має бути без циклу.
Я абстрагуюся від фактичної функції, яка обчислюється, і концентруюсь на її рекурсивній структурі. Формально, я вважаю recurrrence бути динамічним програмуванням , якщо вона має вигляд
при , ˜ Γ d ( i ) = { ( j , d ( j ) ) ∣ j ∈ Γ d ( i ) } і f деяка (обчислювана) функція, яка не використання d , крім через ~ Г д .
При обмеженні зернистості грубими ділянками (ліворуч, верхній лівий, верхній, верхній правий, ... поточної комірки) слід зауважити, що існує фактично три випадки (до симетрії та обертання) дійсних рекурсії динамічного програмування, які інформують, як можна заповнити таблицю:
Червоні ділянки позначають (надмірне збільшення) . Випадки один і два допустимі підмножини, випадок три - найгірший випадок (аж до перетворення індексу). Зауважте, що категорично не потрібно, щоб цілі червоні зони були покриті Γ ; деяких клітинок у кожній червоній частині таблиці достатньо, щоб її пофарбувати в червоний колір. Потрібно, що білі області не містять необхідних комірок.
Прикладами для першого випадку є відстань редагування та найдовша загальна послідовність , другий випадок стосується Bellman & Ford та CYK . Менш очевидні приклади включають такі, що працюють на діагоналі, а не на рядках (або стовпцях), оскільки їх можна обертати, щоб відповідати запропонованим випадкам; див . відповідь Джо для прикладу.
У мене немає (природного) прикладу для випадку три! Отже, моє запитання таке: які приклади для рецидивів / проблем третього випадку динамічного програмування?