Кратчайший путь в ациклическом графе — различия между версиями
| Строка 19: | Строка 19: | ||
<tex>opt[u] = min_{v,u \in E} (opt[v] + cost(vu))</tex>, где cost(vu) - вес ребра из u в v. <br> | <tex>opt[u] = min_{v,u \in E} (opt[v] + cost(vu))</tex>, где cost(vu) - вес ребра из u в v. <br> | ||
Будем обходить вершины в порядке, обратном к топологической сортировке. | Будем обходить вершины в порядке, обратном к топологической сортировке. | ||
| + | |||
| + | [[Категория: Динамическое программирование ]] | ||
Версия 17:31, 10 октября 2011
| Определение: |
Кратчайший путь из u в v – это любой путь p из u в v, для которого , где:
|
Принцип оптимальности на префиксе
Префикс оптимального решения сам является оптимальным решением (в другой подзадаче)
Если ac - оптимальное решение , то и ab (префикс ac) тоже является оптимальным решением.
Для нахождения кратчайшего пути в графе заведем функцию переменную opt[x], в которой хранится длина кратчайшего пути до вершины х.
В общем случае мы можем написать:
, где cost(vu) - вес ребра из u в v.
Будем обходить вершины в порядке, обратном к топологической сортировке.