Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баушев, Гадасина - Оптимизационные задачи на се...doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.33 Mб
Скачать

2.2. Алгоритм Беллмана – Форда построения дерева кратчайших путей для сети с произвольными весами

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

Этап 1. (нахождение длин кратчайших путей до узлов сети).

Шаг 0. Расстановка начальных меток. Присваиваем начальному узлу метку «0»

,

всем остальным узлам приписываем метки, равные +∞:

.

Шаг 1. Для всех i от 0 до n-1 выполняем:

Для каждой дуги выполняем

.

Шаг 2. Для каждой дуги проверяем выполнение неравенства

.

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

Этап 2 аналогичен Этапу 2* модификации алгоритма Дейкстры.

Трудоемкость данного алгоритма составляет О(nm), так как от состоит из О(n) итераций, в каждой из которых проводится О(m) операций. Корректность алгоритма следует из того факта, что на k-й итерации значение метки каждого узла равно длине кратчайшего пути от исходного узла до него с не более чем k дугами. Поскольку путь не может содержать более чем дуг, то и оценку пути нельзя будет уменьшить после итераций. В противном случае в сети существует цикл отрицательной длины.

Пример 3.3. Построим дерево кратчайших путей для сети из примера 3.2. В кружки, обозначающие узлы, будем записывать значения меток. На нулевом шаге вход s получает метку ноль, остальные узлы – ∞:

Рис. 3.13. Начальная расстановка меток сети.

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

Рис. 3.14. Узлы и получили новые метки.

Далее рассматриваем дуги и :

Рис. 3.15. Узлы и t получили новые метки.

Следующие рассматриваемые дуги и :

Рис. 3.16. Узел получил новую метку.

При изменится метка только узла t при рассмотрении дуги :

Рис. 3.17. Узел получил новую метку.

Далее при метки узлов меняться не будут, следовательно, можно перейти ко второму этапу алгоритма и построить дерево кратчайших путей:

Рис. 3.18. Дерево кратчайших путей.

    1. § 3. Задача о максимальном пути

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

Рис. 3.14. Сеть, содержащая контур с положительным весом.

Определение 3.1. Орграф, не содержащий контуров, называется ациклическим.

В данном разделе будем рассматривать только ациклические графы.

Для любых двух узлов ациклических орграфов верно только одно из следующих условий:

  1. Узел предшествует , т.е. существует путь .

  2. Узел следует за , т.е. существует путь .

  3. В графе не существует пути между узлами и .

Таким образом, узлы орграфа можно пронумеровать числами 1,2,…, n так, что узел , следующий за узлом , получает больший номер, чем . При такой нумерации говорят, что на орграфе введен топологический порядок, а нумерация дуг, при которой из условия , следует , называется правильной.

На рис. 3.15 представлена ациклическая сеть, нумерация узлов которой не согласована с топологическим порядком, поскольку узел предшествует узлу .

Рис. 3.15. Ациклическая сеть с нумерацией узлов,

не согласованной с топологическим порядком.

Перенумеруем узлы, введя топологический порядок

Рис. 3.16. Ациклическая сеть с правильной нумерацией узлов,

Рассмотрим алгоритм построения пути максимальной длины от первого узла до последнего – для ациклической сети с правильной нумерацией. В данном случае метка , приписанная узлу , равна длине максимального пути до него.