Изменения

Перейти к: навигация, поиск

Динамическое программирование

163 байта добавлено, 07:24, 16 января 2012
Нет описания правки
== Принцип оптимальности на подотрезках==
Требуется посчитать функцию $f(1, n)$. Принцип состоит в том, что мы пересчитываем следующем: пусть на для всех отрезков $i$f(u, v)$ через такие j$f(i, j)$, что где <tex> u \le i \le j \le v </tex>) известен оптимальный ответ для функции $f(i, j)$. Тогда будем пересчитывать $f(u, v)$ через такие $f(i, j)$. Данную задачу метод можно свести к следующей задаче: пусть дан ориентированный взвешенный ациклический граф без кратных ребер, где вес ребер - любое вещественное число. Требуется найти кратчайший путь от вершины $u$ до $v$. Пусть вершины пронумерованы в порядке топологической сортировки $w(i, j)$ - величина ребра от $i$ до $j$(если ребра не существует, то данное значение равно $\infty$) и $d(i, j)$ - ответ на задачу. Ясно, что $d(i, i) = 0$. Путь от вершины $i$ до $j$ пересчитывается следующим образом: пусть для любого $k$ $(k = [i..j])$, $d(i, k)$ и $d(k, j)$ посчитаны, тогда: <br />
: <tex> d(i, j) = \min(w(i, j), \min\limits_{\mathop{k:i \rightsquigarrow k \rightsquigarrow j}} [d(i, k) + d(k, j)]) </tex> <br />
48
правок

Навигация