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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У П Р А Ж Н Е Н И Я

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

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

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

1.12. Разработать подпрограмму построения кратчайшего пути в ориентированном графе по известным значениям пометок l*(xj). Длины дуг l (xi, xj) и структура графа G = (X, U) задается матрицей весов
D = n ´ n, где dij = l (xi, xj) при (xi, xj) Î U и dij = ¥ при (xi, xj) Ï U.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: