Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по методам оптимальных решений.doc
Скачиваний:
88
Добавлен:
05.06.2015
Размер:
239.62 Кб
Скачать

1.2. Построение пути на графе

В основе алгоритмов (табл. 1.1) построения кратчайшего пути [s, t] между источником s и стоком t в ориентированном графе G = (X, U) лежат процедуры вычисления некоторых пометок (xi), приписываемых вершинам xj X. Значения (xi), представляют собой верхние ограничения на длины путей [s, xj] от s до всех xj, которые могут уменьшаться в процессе итерационных вычислений. Величина (xi) изменяется каждый раз при выполнении условия

(xi) + l(xi, xj) < (xj), (1.1)

где l(xi, xj) - длина дуги (xi, xj)  U. Новое значение пометки определяется как

(xj) = (xi) + l(xi, xj).

Процесс прерывается, если ни одно из ограничений (xj) не может быть улучшено. Окончательное значение пометки *(xj) показывает истинное значение длины кратчайшего пути [s, xj].

Таким образом, чтобы определить длину пути [s, t], необходимо вычислить расстояния от s до всех вершин графа. При этом не существует алгоритма определения расстояния от источника s до стока t, который был бы более эффективным и не требовал вычислений длин путей [s, xj] до всех вершин xj X \ s [6]. Методы вычисления значений (xj) для основных алгоритмов поиска кратчайшего пути на графе представлены в следующих разделах.

Построение пути на графе (т. е. определение последовательности вершин или дуг) по известным значениям (xj) может быть выполнено двумя способами. Пусть дуга (xi, xj)  U лежит на кратчайшем пути [s, t], т. е. (xi, xj)  [s, t]. Тогда для вершин xi и xj должно быть справедливым соотношение

(xj) = (xi) + l(xi, xj) (1.2)

Первый способ построения кратчайшего пути основан на систематической проверке условия (1.2). Здесь последовательность вершин графа, составляющих кратчайший путь [s, t], определяется в обратном порядке, начиная от стока t. В частности, для пути

[s, t] =(s, x(1), x(2), …, x(k), t) (1.3)

можно найти вершину x(k)  Г-1(t), удовлетворяющую условию

(x(k)) = (t) - l(x(k), t).

Затем определяется вершина x(k-1) Г-1(x(k)), для которой

(x(k-1)) = (x(k)) - l(x(k-1), x(k)).

Процесс продолжается до тех пор, пока не будет достигнут источник s.

Второй способ построения пути предполагает неявное использование соотношения (1.2), когда уже при вычислении каждого значения (xj) указывается вершина, из которой ведет путь в xj, уменьшающий величину (xj). В этом случае пометка любой вершины графа состоит из двух частей и имеет вид [(xj), mj], где mj - вершина, из которой помечена xj.

Значение mj изменяется одновременно с (xj), т. е. если справедливо условие (1.1), то mj = xi. Окончательно, для пути [s, t] вида (1.3) вершина x(k) определяется условием x(k) = mt в соответствии с пометкой стока [(t), mt]. На следующую вершину x(k-1) = mk указывает пометка (x(k)), mk] и т.д.

У П Р А Ж Н Е Н И Я

1.9. Что показывают пометки, приписываемые вершинам графа в алгоритмах поиска кратчайшего пути?

1.10. Как используются значения пометок вершин для построения кратчайшего пути на графе?

1.11. Можно ли построить путь [s, t], начиная от источника s?

1.12. Разработать подпрограмму построения кратчайшего пути в ориентированном графе по известным значениям пометок (xj). Длины дуг l(xi, xj) и структура графа G = (X, U) задается матрицей весов D = nn, где dij = l(xi, xj) при (xi, xj)  U и dij =  при (xi, xj)  U.

1.13. Реализовать рекурсивный вариант подпрограммы построения пути [s, t] по условиям предыдущего задания.

1.14. Построить кратчайшие пути [xi, xj], , для графа, показанного на рис. 1.4. Значения (xj) пометок вершин xj X приведены в упражнении 1.23.