Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мат. мет. исл. оп Погорелов / Лекции по мат. мет. ИО.doc
Скачиваний:
66
Добавлен:
26.03.2015
Размер:
3.62 Mб
Скачать

11.1. Алгоритм Беллмана-Форда

Пусть – длина кратчайшего пути отi к n, причем, этот путь содержит не более t дуг. Примем для всехt, и для всех. Тогда уравнения

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

Алгоритм Беллмана-Форда работает за время O(mn), где n – число узлов и m – число дуг, поскольку выполняет не более чем n итераций, и на каждой итерации каждая дуга рассматривается только один раз.

Чтобы найти кратчайшие пути, а не только их длину , мы должны запоминать номер предыдущего узлаs(i) для узла i (так называемый, наследник i), поскольку такой узел является первым узлом на кратчайшем пути от i к n. Всякий раз, когда мы получаем , следует удалить старого наследникаi, если такой имеется, и назначить нового s(i) так, чтобы выполнялось: .

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

Этот алгоритм был изобретён нидерландским ученым Э. Дейкстрой в 1959 году. Он может быть применен только тогда, когда все длины дуг неотрицательны. Алгоритм широко используется в программировании и в компьютерных технологиях, например, его использует протокол OSPF для устранения кольцевых маршрутов.

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

Лемма 11.1. Предположим, что для всех i, j. Пустьбудет таким, что

.

Тогда и для всех .

Доказательство. Путь от узла k к узлу n имеет последнюю дугу, скажем (i, n), длина которой меньше. Для узла мы также имеем . Таким образом,для всех .

Алгоритм Дейкстры состоит из следующих шагов.

  1. Находим узел такой, чтодля всех. Принимаем.

  2. Для каждого узла устанавливаем.

  3. Удаляем узел из графа и возвращаемся к шагу 1, применяя те же самые шаги к новому графу.

Примечание.

  1. Время работы данного алгоритма – , гдеn – число узлов графа. Алгоритм производит n итераций, каждая включает операцию сравнения и обновление данных о длинах дуг для каждого оставшегося узла.

  2. В случае плотных графов с числом дуг , этот алгоритм работает быстрее алгоритма Беллмана-Форда (который имеет вычислительную сложность. Алгоритм Дейкстры является наилучшим из возможных, поскольку любой алгоритм решения задачи кратчайшего пути будет нуждаться воперациях только для изучения каждой дуги, по меньшей мере, один раз.

Пример 11.1. Рассмотрим граф с четырьмя узлами (рис. 11.1).

Рис. 11.1. Граф задачи из примера

  1. Итерация 1 дает и .

  2. Изменяем длину дуг:

  1. Убираем узел = 3 из графа.

  2. Итерация 2 дает ℓ = 2 и .

  3. Изменяем длину дуги:

.

  1. Убираем узел = 2.

  2. Остается только узел 1, так что можем записать:

.

11.3. Преформулировка с неотрицательным

Если () является самой короткой длиной пути от узла i к узлу n, то из уравнения Беллмана следует:

, для всех .

Так что, величины: имеют смысл неотрицательных длин дуг, и вдоль некоторого произвольного пути посещаются узлы:

.

Таким образом, кратчайшие пути для новых длин дуг являются такими же, как и для оригинальных (возможно отрицательных) длинах дуг. Это свойство используется, когда нужно найти кратчайшие расстояния между всеми парами узлов. Если в графе имеются дуги отрицательной длины, можно использоваль алгоритм Беллмана-Форда, чтобы получитьдля заданного корневого узла и затем применить алгоритм Дейкстры для решенияn – 1 оставшихся задач, полагая стоимости дуг неотрицательными. Величины , отпределенные в терминах, при этом вычисляются точно.

Для плотных графов при общая сложность такого алгоритма:

.

Сравним это с вычислительной сложностью алгоритма Беллмана-Форда , используемого для решения задачи нахождения кратчайшего расстояния между всеми парами узлов.