Задачи построения кратчайших путей

Пусть задан ориентированный (или неориентированный) граф задачи построения кратчайших путей - student2.ru в котором задачи построения кратчайших путей - student2.ru – множество вершин, а задачи построения кратчайших путей - student2.ru – множество дуг. Припишем каждой дуге задачи построения кратчайших путей - student2.ru «длину» задачи построения кратчайших путей - student2.ru .

Определение 1. Путь задачи построения кратчайших путей - student2.ru из вершины задачи построения кратчайших путей - student2.ru в вершину задачи построения кратчайших путей - student2.ru определим как последовательность дуг, которая начинается в задачи построения кратчайших путей - student2.ru и заканчивается в задачи построения кратчайших путей - student2.ru , в которой конец предшествующей дуги является началом следующей. Сумму длин дуг, входящих в путь, назовем длиной пути.

Задачи построения кратчайших путей естественно возникают во множестве приложений. Например, если в сети связи информация из источника должна достичь получателей за минимальное время, то, построив граф, в котором длина дуги совпадает с временем прохождения сигнала по этой дуге, мы сведем проблему к задаче построения дерева кратчайших путей (ДКП) из источника к приемникам сигнала.

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

3.1. Алгоритм Дейкстры

Алгоритм изобретен нидерландским ученым Э. Дейкстрой
в 1959 г. [4] и строит ДКП из начальной вершины (корня) графа во все остальные вершины при неотрицательных длинах дуг (ребер).

Пусть задачи построения кратчайших путей - 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 . Метка источника задачи построения кратчайших путей - student2.ru не меняется в процессе работы алгоритма. Сначала задачи построения кратчайших путей - student2.ru для всех задачи построения кратчайших путей - student2.ru . На каждом шаге алгоритма ищется дуга задачи построения кратчайших путей - student2.ru которая добавляется в задачи построения кратчайших путей - student2.ru , и обновляется метка j-ой вершины задачи построения кратчайших путей - student2.ru . После этого (с константной трудоемкостью) обновляется метка каждой не включенной в задачи построения кратчайших путей - student2.ru вершины задачи построения кратчайших путей - student2.ru

Алгоритм останавливается, когда все вершины графа включены в дерево задачи построения кратчайших путей - student2.ru (после выполнения задачи построения кратчайших путей - student2.ru шагов). Трудоемкость одного шага (выбор вершины для включения в задачи построения кратчайших путей - student2.ru ) равна задачи построения кратчайших путей - student2.ru . Следовательно, общая трудоемкость алгоритма Дейкстры – задачи построения кратчайших путей - student2.ru .

3.2. Алгоритм Беллмана – Форда

Если длины некоторых ребер (дуг) принимают отрицательные значения, то в случае отсутствия циклов отрицательной длины кратчайшие пути из одной вершины во все остальные строит алгоритм Беллмана – Форда [4].

Введем задачи построения кратчайших путей - student2.ru – номер вершины, непосредственно предшествующей вершине задачи построения кратчайших путей - student2.ru в пути задачи построения кратчайших путей - student2.ru . Тогда алгоритм Беллмана – Форда можно записать по шагам следующим образом.

Шаг 1. Для каждой вершины задачи построения кратчайших путей - student2.ru : если задачи построения кратчайших путей - student2.ru , то положить задачи построения кратчайших путей - student2.ru ; иначе положить задачи построения кратчайших путей - student2.ru и задачи построения кратчайших путей - student2.ru .

Шаг 2. Для каждой вершины задачи построения кратчайших путей - student2.ru и для каждого ребра задачи построения кратчайших путей - student2.ru : если задачи построения кратчайших путей - student2.ru , то положить задачи построения кратчайших путей - student2.ru и задачи построения кратчайших путей - student2.ru .

Шаг 3. Для каждого ребра задачи построения кратчайших путей - student2.ru : если задачи построения кратчайших путей - student2.ru , то граф содержит отрицательный цикл.

Корректность приведенного алгоритма можно доказать по индукции.

Лемма 2.1. После выполнения задачи построения кратчайших путей - student2.ru итераций:

1) если задачи построения кратчайших путей - student2.ru , то задачи построения кратчайших путей - student2.ru – длина некоторого пути из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru

2) если существует путь из задачи построения кратчайших путей - 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 . Значит, величина задачи построения кратчайших путей - 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 . На i-ой итерации величина задачи построения кратчайших путей - student2.ru сравнивается с задачи построения кратчайших путей - student2.ru и ей присваивается новое значение, если задачи построения кратчайших путей - student2.ru меньше. Следовательно, после i-ой итерации задачи построения кратчайших путей - student2.ru не превосходит длины кратчайшего пути из источника в задачи построения кратчайших путей - student2.ru , содержащего не более задачи построения кратчайших путей - student2.ru ребер. ∎

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

3.3. Алгоритм Флойда – Уоршелла

Алгоритм Флойда – Уоршелла (Floyd­–Warshall) разработан в 1962 г. [4] и используется для нахождения кратчайших расстояний между всеми парами вершин взвешенного ориентированного графа.

Введем обозначение задачи построения кратчайших путей - 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 , тогда задачи построения кратчайших путей - 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

– сначала все длины пути из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru равны нулю;

– длина пути задачи построения кратчайших путей - student2.ru может быть меньше в случае, если она отрицательная, т. е. это отрицательный цикл;

– значит, после остановки алгоритма длина пути из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru будет отрицательной, если существует цикл отрицательной длины из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru .

Следовательно, для определения отрицательного цикла с помощью алгоритма Флойда – Уоршелла достаточно просмотреть диагональ матрицы задачи построения кратчайших путей - student2.ru . Присутствие на диагонали отрицательных чисел говорит о наличии в графе как минимум одного отрицательного цикла. Очевидно, в неориентированном графе ребро отрицательной длины вместе с инцидентными ему вершинами образует отрицательный цикл.

3.4. Примеры и упражнения

Пример 3.1. Построить дерево кратчайших расстояний из вершины s во все вершины ориентированного графа, изображенного на рис. 3.1a (рядом с дугами указаны их длины), с помощью алгоритма Дейкстры.

Рисунок-3.1. Иллюстрация работы алгоритма Дейкстры

Решение. Положим длины кратчайших путей в вершины (метки вершин) равными задачи построения кратчайших путей - student2.ru , и частично построенное дерево кратчайших путей задачи построения кратчайших путей - student2.ru . Найдем задачи построения кратчайших путей - student2.ru и положим задачи построения кратчайших путей - student2.ru Метки других вершин не изменятся, т. к. из вершины 4 не исходит ни одна дуга.

Найдем задачи построения кратчайших путей - student2.ru и положим задачи построения кратчайших путей - student2.ru . Обновим метку вершины 1: задачи построения кратчайших путей - student2.ru . Метки других вершин не изменятся. Продолжая процесс, добавим последовательно в строящееся дерево ребра задачи построения кратчайших путей - student2.ru и вершины 5, 1, 3, 6. В результате будет построено дерево, показанное на рис. 2.1b, в котором метки рядом с вершинами – длины кратчайших путей из источника задачи построения кратчайших путей - student2.ru .

Пример 3.2. Найти длины кратчайших путей между всеми парами вершин графа, изображенного на рис. 3.1a, с помощью алгоритма Флойда – Уоршелла.

Решение. Зададим начальные длины путей между вершинами матрицей с элементами задачи построения кратчайших путей - student2.ru полагая задачи построения кратчайших путей - student2.ru (рис. 3.2a, на котором символ «-» соответствует бесконечности). Воспользуемся рекуррентными соотношениями задачи построения кратчайших путей - student2.ru для вычисления длин путей после первой итерации (рис. 2.2b).

- - -
- - - -
- - - - -
- - - - - -
- - - - - -
- - - - -
- - -
-
- - - -
- - - - - -
- - - - - -
- -
- -
a) задачи построения кратчайших путей - student2.ru b) задачи построения кратчайших путей - student2.ru

Рисунок-3.2. Матрица начальных расстояний (a) и после первой итерации (b)

- - - - - -
- - - - - -

Рисунок-3.3. Матрица кратчайших расстояний между всеми парами вершин

Очевидно, что из вершин 4 и 5 нет путей в другие вершины, поэтому бесконечности в этих строках сохранятся как после первой итерации, так и в дальнейшем.

После 4 итерации получим окончательные значения для минимальных длин путей, связывающих все пары вершин (рис. 3.3).

Упражнение 3.1. Доказать, что алгоритм Дейкстры строит дерево кратчайших расстояний.

Упражнение 3.2. Найти кратчайшие пути между всеми парами вершин графа, изображенного на рис. 2.1a.

Упражнение 3.3. Существует ли отрицательный цикл в графе, изображенном на рис. 2.4?

Упражнение 3.4. Воспользуйтесь алгоритмом Беллмана – Форда для построения кратчайших путей из вершины задачи построения кратчайших путей - student2.ru в графе, изображенном на рис. 2.4, удалив входящие в задачи построения кратчайших путей - student2.ru дуги.

Упражнение 3.5. Доказать корректность алгоритма Флойда – Уоршелла.

Рисунок-3.4. Ориентированный взвешенный граф
(рядом с дугами указаны их длины)

Упражнение 3.6.Профессор О. П. Рометчивый предлагает следующий способ нахождения кратчайшего пути из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru в данном ориентированном графе, содержащем рёбра отрицательного веса. Прибавим достаточно большую константу к весам всех рёбер и сделаем все веса положительными, после чего воспользуемся алгоритмом Дейкстры. Корректен ли такой подход? Если да, то докажите это, если нет –– укажите контрпример.

Упражнение 3.7.Рассмотрим ориентированный граф, в котором рёбра отрицательного веса выходят только из вершины s, но циклов отрицательного веса при этом нет. Может ли алгоритм Дейкстры, вызванный для вершины задачи построения кратчайших путей - student2.ru , выдать неправильный ответ в данном случае?

Упражнение 3.8.Пусть неориентированный граф задачи построения кратчайших путей - student2.ru задаёт множество городов и дорог между ними. Для каждой дороги задачи построения кратчайших путей - student2.ru известна её длина в километрах задачи построения кратчайших путей - student2.ru . Предположим, что вам необходимо добраться из города задачи построения кратчайших путей - student2.ru в город задачи построения кратчайших путей - student2.ru , но ваша машина может проехать без дозаправки не больше задачи построения кратчайших путей - student2.ru километров. Заправки есть во всех городах, но не вдоль дорог (так что годятся только маршруты, где все рёбра не длиннее задачи построения кратчайших путей - student2.ru ).

(a) Постройте алгоритм, определяющий за линейное время, можно ли при таких ограничениях добраться из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru .

(b) Допустим теперь, что вы хотите купить новую машину. Какой минимальный объём бака машины позволит добраться из задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru ? Постройте алгоритм, дающий ответ за время задачи построения кратчайших путей - student2.ru .

Упражнение 3.9.Пусть граф задачи построения кратчайших путей - student2.ru представляет собой множество городов задачи построения кратчайших путей - student2.ru и множество дорог задачи построения кратчайших путей - student2.ru между ними. У каждой дороги задачи построения кратчайших путей - student2.ru есть длина задачи построения кратчайших путей - student2.ru . Решено построить новую дорогу, и список задачи построения кратчайших путей - student2.ru содержит пары вершин, между которыми новая дорога может быть построена. Для всех возможных новых дорог задачи построения кратчайших путей - student2.ru известна длина задачи построения кратчайших путей - student2.ru . Надо найти дорогу из задачи построения кратчайших путей - student2.ru , строительство которой приведёт к максимальному уменьшению длины кратчайшего пути между заданными двумя городами задачи построения кратчайших путей - student2.ru и задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru . Постройте эффективный алгоритм для такой задачи.

Упражнение 3.10.Применения задачи о кратчайших путях можно найти даже в валютных операциях. Пусть через задачи построения кратчайших путей - student2.ru обозначены различные валюты. Например, задачи построения кратчайших путей - student2.ru может обозначать рубли, задачи построения кратчайших путей - student2.ru –– доллары, задачи построения кратчайших путей - student2.ru –– фунты. Пусть через задачи построения кратчайших путей - student2.ru обозначен курс конвертации валюты задачи построения кратчайших путей - student2.ru в задачи построения кратчайших путей - student2.ru : на одну единицу валюты задачи построения кратчайших путей - student2.ru можно купить задачи построения кратчайших путей - student2.ru единиц валюты задачи построения кратчайших путей - student2.ru . Данные курсы удовлетворяют естественному условию задачи построения кратчайших путей - student2.ru , которое говорит, что обмен туда-обратно невыгоден.

(a) Постройте эффективный алгоритм, который, зная все задачи построения кратчайших путей - student2.ru , находит наиболее выгодную последовательность обменов для конвертации заданной валюты задачи построения кратчайших путей - student2.ru в заданную валюту задачи построения кратчайших путей - student2.ru . (Подсказка: для решения задачи представьте входные данные в виде графа с вещественными весами.)

Под влиянием спроса и предложения курсы валют меняются. Представим, что в какой-то момент нашлись валюты задачи построения кратчайших путей - student2.ru , для которых задачи построения кратчайших путей - student2.ru . Это означает, что обменяв какое-то количество валюты задачи построения кратчайших путей - student2.ru в соответствии с данной последовательностью, мы в итоге получим больше исходного. (Вряд ли это продлится долго, но обидно упустить такую возможность!)

(b) Постройте эффективный алгоритм, проверяющий наличие такой аномальной ситуации. (Подсказка: используйте граф предыдущего пункта.)

Упражнение 3.11.Задача о путешествующем пароходе. Представьте, что у вас есть пароход, который может совершать рейсы между портовыми городами из множества задачи построения кратчайших путей - student2.ru . Посещая город задачи построения кратчайших путей - student2.ru , вы зарабатываете задачи построения кратчайших путей - student2.ru рублей, а стоимость перемещения из города задачи построения кратчайших путей - student2.ru в город задачи построения кратчайших путей - student2.ru составляет задачи построения кратчайших путей - student2.ru рублей. Вы хотите найти циклический маршрут, максимизирующий отношение прибыли к затратам.

Для этого рассмотрим ориентированный граф задачи построения кратчайших путей - student2.ru , где вершинами являются города и каждые две вершины соединены ребром. Определим относительную прибыль цикла C следующим образом: задачи построения кратчайших путей - student2.ru

Через задачи построения кратчайших путей - student2.ru обозначим максимальную относительную прибыль простого цикла. Значение задачи построения кратчайших путей - student2.ru можно найти двоичным поиском, если мы умеем проверять по данному задачи построения кратчайших путей - student2.ru , верно ли неравенство задачи построения кратчайших путей - student2.ru .

Итак, рассмотрим произвольное задачи построения кратчайших путей - student2.ru . Присвоим каждому ребру задачи построения кратчайших путей - student2.ru вес задачи построения кратчайших путей - student2.ru .

(a) Покажите, что если в этом графе есть цикл отрицательного веса, то задачи построения кратчайших путей - student2.ru .

(b) Покажите, что если все циклы имеют строго положительный вес, то задачи построения кратчайших путей - student2.ru .

(c) Постройте эффективный алгоритм, который для заданной точности задачи построения кратчайших путей - student2.ru находит цикл задачи построения кратчайших путей - student2.ru , для которого задачи построения кратчайших путей - student2.ru . Докажите корректность алгоритма и оцените его время работы в терминах задачи построения кратчайших путей - student2.ru , и задачи построения кратчайших путей - student2.ru .

ЗАДАЧА ШТЕЙНЕРА

Пусть на плоскости расположены три точки, расстояния между которыми определяются евклидовой метрикой, и требуется связать эти точки с помощью МОД. Построенное дерево показано на рис. 4.1a, и его длина (сумма длин ребер) равна задачи построения кратчайших путей - student2.ru

b)
a)

Рисунок-4.1.Минимальное остовное дерево(a)и дерево Штейнера(b)

Введем дополнительную (промежуточную) точку и соединим исходные точки с промежуточной точкой. В результате получим связывающее дерево меньшей длины задачи построения кратчайших путей - student2.ru (по сравнению с МОД) (рис. 4.1b). Это дерево является геометрическим (или метрическим) деревом Штейнера, и в него вошла одна дополнительная точка (2, 2) – вершина Штейнера. При построении метрического дерева Штейнера для уменьшения длины дерева можно использовать любые дополнительные точки на плоскости.

Далее будем рассматривать задачу Штейнера на графах, формулировка которой приводится в следующем разделе. В последней задаче точки Штейнера выбираются из заданного множества вершин графа.

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