Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры

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

Нередко не удается разбить задачу на небольшое число подзадач, объединение решений которых позволяет получить решение исходной задачи. В таких случаях мы можем попытаться разделить задачу на столько подзадач, сколько необходимо, затем каждую подзадачу разделить на еще более мелкие подзадачи и т.д. Если бы весь алгоритм сводился именно к такой последовательности действий, мы бы получили в результате алгоритм с экспоненциальным временем выполнения. Но зачастую удается получить лишь полиномиальное число подзадач и поэтому ту или иную подзадачу приходится решать многократно. Если бы вместо этого мы отслеживали решения каждой решенной подзадачи и просто отыскивали в случае необходимости соответствующее решение, мы бы получили алгоритм с полиномиальным временем выполнения.

С точки зрения реализации иногда бывает проще создать таблицу решений всех подзадач, которые нам когда-либо придется решать. Мы заполняем эту таблицу независимо от того, нужна ли нам на самом деле конкретная подзадача для получения общего решения. Заполнение таблицы подзадач для получения решения определенной задачи получило название динамического программирования (это название происходит из теории управления).1

Алгоритм Кратчайший путь из одного источника (алгоритм Дейкстры)

В задаче нахождения кратчайших путей из одного источника ситуация иная. Хотя нет причин предполагать, что для ее решения понадобится более 0(е) времени, ни один такой алгоритм не известен. Мы обсудим алгоритм сложности Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , работа которого основана на построении множества S узлов, кратчайшие расстояния до которых от источника известны. На каждом шаге к S добавляется тот из оставшихся узлов, скажем и, расстояние до которого от источника меньше всех других оставшихся узлов. Если стоимости всех ребер неотрицательны, то можно быть уверенным, что путь из источника в v проходит только через узлы из S. Поэтому достаточно найти для каждого узла v кратчайшее расстояние до него от источника вдоль пути, проходящего только через узлы из S.

Вход. Ориентированный граф G== (V, Е), источник Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru и функция Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , отображающая множество ЕхЕ в множество неотрицательных вещественных чисел. Полагаем Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , если Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru и Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru

Метод: Строим такое множество вершин Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , что кратчайший путь из источника в каждый узел Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru целиком лежит в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru . Элемент Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru массива Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru содержит стоимость кратчайшего пути ведущего из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , который проходит только через узлы из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru .

Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru

Продолжение 28

Чтобы показать корректность, надо доказать индукцией по размеру множества S, что для каждого ребра Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru число Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru равно длине кратчайшего пути из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru . Более того, для всех Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru число Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru равно длине кратчайшего пути из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , лежащего целиком (если не считать сам узел v) в S.

Базис. Пусть ||S|| = 1. Кратчайший путь из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в себя имеет длину 0, а путь из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru , лежащий целиком (исключая Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru ) в S, состоит из единственного ребра Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru . Таким образом, строки 2 и 3 корректно формируют начальные значения массива D.

Шаг индукции. Пусть w — узел, выбранный в строке 5. Если число D[w] не равно длине кратчайшего пути из v0 в w, то должен быть более короткий путь Р. Этот путь Р должен содержать некоторый узел, отличный от w и не принадлежащий S. Пусть v - первый такой узел на Р. Но тогда расстояние от Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru до Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru меньше D[w], а кратчайший путь в Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru целиком (исключая сам узел и) лежит в S. Следовательно, по предположению индукции Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в момент выбора w, пришли к противоречию. Отсюда заключаем, что такого пути Р нет и Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru — длина кратчайшего пути из Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru в w. Второе утверждение (о том, что Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru остается корректным) очевидно ввиду строки 8.

Динамическое программирование. Алгоритм нахождения кратчайшего пути Дейкстры - student2.ru

Наши рекомендации