Задачи о путях во взвешенных графах

Среди задач анализа ориентированных графов весьма важны следующие задачи.

1. Вычисление для заданного ориентированного графа его матрицы достижимости. Эта задача называется задачей построения транзитивного замыкания ориентированного графа. Такое название связано с тем, что матрицу достижимости можно рассматривать как матрицу рефлексивного и транзитивного замыкания бинарного отношения смежности.

2. Задача о перечислении пути – между всеми парами вершин.

3. Вычисление наименьших расстояний между всеми парами вершин – задача о кратчайших расстояниях.

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

Определение. Взвешенным ориентированным графом называют пару W=(G, w), где G=(V,E) – обычный ориентированный граф, а w: Е®Â – весовая функция со значением в некотором идемпотентном полукольце  = (R, +, ×, 0, 1) (состоит из моноидов).

Пусть вершины графа перенумерованы. Тогда взвешенный ориентированный граф может быть задан матрицей А, элементы aij которой есть значения весовой функции на ребре: w(i,j), если из вершины i в вершину j ведёт ребро, и нулю полукольца в противном случае. Матрица весов.

Стоимость прохождения из вершины vi в вершину vj – это сумма в полукольце Â весов всех путей, ведущих из vi в вершину vj. Следует сначала определить стоимость прохождения по некоторому фиксированному пути, затем просуммировать в полукольце Â стоимость всех путей. — Вообще говоря, это будет бесконечная сумма замкнутого полукольца, т.е. точная верхняя грань последовательности весов, соответствующих путям длины l. В результате этих рассуждений получаем, что следует вычислить сумму степеней матрицы А.

Для вычисления матрицы А* достаточно решить (т.е. найти наименьшее решение) систему уравнений в Â:

где ¶jÎÂn – j-й единичный вектор, все элементы которого, кроме j-го, равны 0, а j-й равен 1.

Пример на полукольца Â и B.

Матричный подход позволяет найти расстояния между всеми парами вершин в нагруженном графе. Зададим граф матрицей расстояний между смежными парами вершин D =(dij) – диагональные элементы полагаются равными нулю, длины отсутствующих рёбер объявляются ¥. Определим произведение двух квадратных матриц формулой:

Пусть Dm означает m -ю степень матрицы D относительно такого произведения; элементы этой матрицы будем обозначать через .

Лемма. Для любых i, j величина равна минимальной длине цепи между вершинами vi и vj, в которой число рёбер не превосходит m.

Доказательство леммы основано на аксиомах расстояния и свойстве экстремальности геодезических. Алгоритм Уоршалла – Флойда.

Для поиска кратчайших расстояний между вершинами в нагруженном графе применяется эффективный алгоритм Дейкстры, представляющий из себя соединение алгоритма волнового фронта и жадного алгоритма. Алгоритм фактически реализует принцип Гюйгенса–Френеля – каждая вершина становится источником волны, эти волны «интерферируют» – выбирается та волна, которая пришла раньше.

Алгоритм использует технику релаксации. Суть её в следующем: для каждой вершины v хранится число d[v], являющееся верхней оценкой кратчайшего пути от начальной вершины, найденной к настоящему моменту (в начальный момент это ¥). В процессе работы алгоритма поддерживается множество вершин – «фронт волны» S Ì V, состоящее из вершин v, для которых к данному времени (такту, шагу) определены верхние оценки расстояния до начальной вершины. Вершины фронта волны получают метку m = 0 (помечаются серым цветом). Вершины, для которых найдены расстояния d[v] от начальной вершины, получают метку m = 1 (чёрную). Оставшиеся вершины помечаются белым цветом – d[v] = ¥.

Сначала происходит инициализация – все вершины получают белые метки, волновой фронт пуст, «родителей» нет. Затем выбирается начальная вершина и её соседи получают метки – поступают в волновой фронт S. Из этих вершин выбирается ближайшая – u1.

Второй по расстоянию может быть только вершина из SÇG(u1).

1. S › G(s), d = ¥. "vÎS d[v]= d[v®u], p[v] = s, m(v) = 0. IF d[v] < d THEN d = d[v], u1 = v. S › S\{u1}, m(u1) = 1.

2. а) "vÎS IF d[v] > d[u1] + d[u1®v ] THEN d[v] = d[u1] + d[u1®v], p[v] = u1.

б) "vÎ G(u1) m(v) = 0, d[v]= d[u1] + d [u1®v], p[v] = u1, S › S Ç {v}.

в) "uÎ G(u1) ("vÎS IF d[u] > d[v] + d[v®u ] THEN d[u] = d[v] + d[v®u], p[u] = v) S › S Ç {u}. d = ¥. "vÎS IF d[v] < d THEN d = d[v], u2 = v.

3. …

Пункт 2а пересчитывает расстояния для vÎS через вершину u1, пункт 2б помечает вершины из G(u1) и добавляет их в S, пункт 3в находит кратчайший путь в каждую вершину, сравнивает их между собой и выбирает ближайшую вершину u2

Вариант: алгоритм перебирает вершины uÎV\S & uÎГ(S) и находит для каждой родителя p[u] = vÎS с минимальным расстоянием d[u] (жадность!): d[u]= (d[u], d[u] +d[v®u]) и проводит релаксацию всех вершин, смежных с u, после чего цикл повторяется. Вершины, не лежащие в S, хранятся в очереди с приоритетами, определяемыми d. Восстановление кратчайшего пути из начальной вершины элементарно – обратный путь есть: u ® p[u] ® p[p[u]]…

Для сети N возникает задача нахождения расстояния d(u,v) для данных вершин u и v и соответствующего кратчайшего пути. Известно несколько способов решения этой задачи. Мы рассмотрим один из них, основой которого является алгоритм Дейкстры, названный в честь известного скандинавского специалиста по компьютерным наукам Дейкстры.

Алгоритм Дейкстры вычисляет расстояние от фиксированной вершины v0 до всех остальных вершин сети. Прежде, чем привести описание алгоритма, введем необходимые обозначения. Пусть N=(G,a) – сеть, v0 – фиксированная вершина этой сети, v1,…,vk – остальные вершины. Для i=1,…,k расстояние d(v0,vi) обозначим через d(vi). На множестве вершин введем двухместную функцию a(v,v’) следующим образом:

.


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



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