Заполняем таблицу Cost(i, j)
, где i in {1, ..., n}
и j in {0, ..., M}
.Интерпретация Cost(i, j)
состоит в том, что это минимальная стоимость для подзадачи y_1, ..., y_i
с пределом j
, где x_i = j
(некоторые значения y
могут быть больше, чем j
, но проблема все еще можетбыть четко определенным).У нас есть рецидивы для всех i in {2, ..., n}
и всех j in {0, ..., M}
,
2
Cost(1, j) = |j - y_i|
2
Cost(i, j) = min Cost(i-1, k) + |j - y_i|
0<=k<=j
Наивно, это фактор M
слишком медленный.Однако, если мы оценим Cost
в правильном порядке, мы можем заменить min на min предыдущего минимума и Cost(i-1, j)
и получить желаемое время работы O(n M)
.