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

Теория

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

  1. Вычисление для заданного ориентированного графа его матрицы достижимости. Эту задачу будем называть задачей построения транзитивного замыкания ванного графа. Такое название связано с тем, что матрицу достижимости можно рассматривать как матрицу транзитивного и рефлексивного замыкания бинарного отношения непосредственной достижимости в ориентированном графе.
  2. Вычисление наименьших расстояний между всеми парами вершин в ориентированном графе. Эту задачу будем называть задачей о кратчайших расстояниях. Задачу о кратчайших расстояниях можно сформулировать так. Пусть задан взвешенный ориентированный граф и пусть из вершины v достижима вершина w. Фиксируем какой-либо путь S, ведущий из v в w. Расстоянием от вершины v до вершины w по пути S называют сумму меток дуг, входящих в этот путь, а наименьшим — минимальное из расстояний между вершинами v и w по всем возможным путям.
    Отметим, что задача о кратчайших расстояниях не всегда имеет решение. Например, если в ориентированном графе есть петля, метка которой — отрицательное число, то по этой петле можно проходить сколько угодно раз и тем самым уменьшать сумму меток дуг пути, включающего эту петлю, до любого наперед заданного значения.
  3. Перечисление всех путей между двумя произвольными вершинами. Эту задачу будем называть задачей о перечислении путей. При ее решении требуется для любой заданной пары вершин u и v ориентированного графа получить все пути, для которых u является началом, а v — концом.

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

Ранее мы ввели понятие взвешенного неориентированного (ориентированного) графа и метки ребер (дуг) определили как числа, поставленные в соответствие ребру (дуге). Обобщим это понятие для ориентированного графа.

Определение 5.13. Взвешенным (или размеченным) ориентированным графом называют пару W = (G, φ), где G = (V, Е) — обычный ориентированный граф, а φ: Е → R — весовая функция (или функция разметки) со значениями в некотором идемпотентном полукольце R = (R, +, ⋅, 0, 1), причем (∀e ∈ Е)(φ(е) ≠ 0).

Мы будем в этом случае также говорить, что ориентированный граф размечен над идемпотентным полукольцом R. Часто полукольцо R является замкнутым, хотя это требование необязательно. Будем, однако, везде в этом пункте предполагать, что R — полукольцо с итерацией.

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

Оказывается, что вычисление итерации А* матрицы А дает решение всех сформулированных выше задач, если для каждой задачи выбирать соответствующее полукольцо. А именно в случае полукольца В (см. пример 3.2) получаем решение задачи о транзитивном замыкании, в случае полукольца R+ (см. пример 3.1) — решение задачи о кратчайших расстояниях*.

Будем называть задачу вычисления матрицы А* для ориентированного графа, размеченного над произвольным полукольцом с итерацией, в частности над замкнутым полукольцом, общей задачей о путях во взвешенных ориентированных графах.

В такой общности подхода, когда множество, казалось бы, не связанных друг с другом задач решается единым алгоритмом, „настраиваемым" на разные задачи выбором соответствующего идемпотентного полукольца (т.е. разных областей значений весовой функции), состоит несомненное преимущество абстрактно-алгебраического подхода к решению таких задач на графах.

*О методе решения третьей из сформулированных выше задач см. задачу 7.36.

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

Метка пути, ведущего из вершины vi в вершину vj, есть произведение в полукольце R меток входящих в путь дуг в порядке их следования (для пути ненулевой длины) и есть 1 (единица полукольца R) для пути нулевой длины.

Стоимость прохождения из вершины vi в вершину vj (или между i-й и j-й вершинами) — это сумма в полукольце R меток всех путей, ведущих из вершины vi в вершину vj.

Заметим, что сумма, определяющая стоимость прохождения, вообще говоря, есть бесконечная сумма замкнутого полукольца, т.е. точная верхняя грань соответствующей последовательности меток. Это связано с тем, что множество всех путей, ведущих из одной вершины графа в другую, в общем случае бесконечно (но, как можно доказать, не более чем счетно).

Аналогично можно определить стоимость прохождения из вершины в вершину по какому-либо множеству путей. Отметим, что если стоимость прохождения между парой вершин по какому-либо множеству путей равна 0, то это означает, что не существует пути, принадлежащего данному множеству путей, ведущего из первой вершины рассматриваемой пары во вторую вершину.

Матрица меток дуг является элементом полукольца матриц над полукольцом R. В этом полукольце определены операции сложения и умножения матриц, а также возведение матрицы в неотрицательную степень. Докажем следующее утверждение.

Лемма 5.1. Элемент (l)ij матрицы Аl, l ≥ 0, равен стоимости прохождения из вершины vi в вершину vj по всем путям длины l.

◀ Доказательство проведем индукцией по l. При l = 0 утверждение очевидно, так как А0 = Е, где Е — единичная матрица, которая будет матрицей стоимости прохождения по всем путям длины 0.

При l = 1 утверждение также очевидно. Далее,

Согласно предположению индукции, элемент а(l-1)ik равен стоимости прохождения из вершины vi в вершину vk по всем путям длины l-1. Множество всех путей длины l из вершины vi в вершину vj, проходящих через фиксированную k-ю вершину так, что вершина vk связана дугой с вершиной vj (vk → vj,) образуется путем присоединения дуги (vk, vj) к каждому из путей, ведущих из vi в vk и имеющих длину l - 1.

Рис. 5.26. Задача о путях

Тогда видно, что написанное выше выражение для элемента (l)ij дает стоимость прохождения из вершины vi в вершину vj по всем путям длины l (рис. 5.26). ▶

Так как стоимость прохождения между парой вершин (vi,vj) равна сумме меток всех путей, ведущих из первой вершины во вторую, а указанную сумму можно можно получить, суммируя последовательно метки путей длины 0, длины 1, длины 2 и т.д., то матрица стоимостей взвешенного ориентированного графа с учетом доказанной леммы 5.1 может быть представлена в виде

До сих пор мы рассматривали матрицы над замкнутым полукольцом. Однако, если элементы матрицы А принадлежат некоторому полукольцу с итерацией, из теоремы 3.9 следует, что и все элементы матрицы стоимостей С = А* останутся в этом же полукольце. Таким образом, полученные результаты можно перенести на произвольное полукольцо с итерацией.

Теорема 5.4. Матрица стоимостей ориентированного графа G, размеченного над полукольцом с итерацией R (в частности, над замкнутым полукольцом), равна итерации матрицы А меток дуг ориентированного графа G. #

Для вычисления С = А* достаточно решить (т.е. найти наименьшее решение) в R при всех j = 1,n систему уравнений

ξ = A ξ + εj,

где εjRn — j-й единичный вектор, т.е. вектор, все элементы которого, кроме j-ro, равны 0, a j-й равен единице полукольца R. Наименьшее решение имеет вид ξ = A*εj (см. 3.3). Тогда столбец ξ = A*εj есть j-й столбец матрицы А*. Такой метод вычисления матрицы А* аналогичен известному из линейной алгебры методу элементарных преобразований при вычислении обратной матрицы.

Выясним теперь смысл матрицы стоимостей С = А* для полуколец В и R+.

В первом из этих полуколец метка отдельного пути всегда равна 1 (так как метка дуги в размеченном над полукольцом графе не может, согласно определению, быть нулем полукольца). Следовательно, стоимость сij = 1, если существует хотя бы один путь из i-й вершины в j-ю, и сij = 0, если иначе. Другими словами, для полукольца сij матрица стоимостей совпадает с матрицей достижимости ориентированного графа.

В полукольце R+ метка пути — это арифметическая сумма меток его дуг, так как умножение в R+ — это обычное арифметическое сложение. Поскольку сложение в R+ — это взятие наименьшего из слагаемых, то стоимость сij — это наименьшая из меток пути среди всех путей, ведущих из i-й вершины в j-ю, т.е. это и есть наименьшая длина пути между указанными вершинами. Таким образом, в полукольце R+ матрица стоимостей является матрицей кратчайших расстояний, т.е. наименьших длин путей между всеми парами вершин ориентированного графа.

Пример 5.9. Рассмотрим граф, изображенный на рис. 5.27, и решим для него задачу вычисления матрицы достижимости. На числовые метки дуг внимания пока не обращаем, считая, что ориентированный граф размечен над полукольцом В и метка каждой дуги равна 1, т.е. ориентированный граф задан матрицей

Рис. 5.27. Вычисление матрицы достижимости

Запишем систему уравнений в полукольце В для определения первого столбца матрицы А*

Отметим, что часто нулевые слагаемые не записывают, как и в системах уравнений в поле действительных чисел.

Воспользуемся методом последовательного исключения неизвестных (см. 3.3). Поскольку в правой части первого уравнения нет переменной х1, можно исключить эту переменную из системы, подставив в остальные уравнения. С учетом идемпотентности сложения получим

Из второго уравнения имеем х2 = 1*(x3 + 0). В полукольце В итерация любого элемента равна единице полукольца. Поэтому х2 = х3 + 0. Исключив х2 из системы, получим

Далее вычислим х3 = 1*0 = 1 ⋅ 0 = 0. Подставив х3 = 0 в последнее уравнение, найдем х4 = 1*1 = 1.

Итак, первый столбец А* есть

Второй столбец определяется из системы

Исключая х1, получаем

Из второго уравнения имеем х2 = 1*(х3 + 1) = х3 + 1. Далее находим

Отсюда х3 = 1*1 = 1 и х4 = х4 +1. В итоге х4 = 1*1 = 1, х2 = 1 + 1 = 1, х1 = 1 + 1 + 1 + 0 = 1. Таким образом, второй столбец А* есть

Аналогично вычисляем третий и четвертый столбцы и в результате получаем матрицу А*:

Анализ этой матрицы показывает (см. 5.2), что данный граф связен и имеет две бикомпоненты: {v1, v4} и {v2, v3}.

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

есть xk = 1 и не зависит от значений переменных в правой части уравнения. С учетом этого решение системы (5.3) упростится. Так, из первого уравнения сразу получаем х1 = 1. Тогда четвертое уравнение принимает вид х4 = x3 +1, откуда х4 = 1. Поскольку х1 и х4 не входят в оставшиеся два уравнения, их решение нужно искать, используя метод исключения.

Пример 5.10. Для графа, изображенного на рис. 5.27, вычислим матрицу кратчайших расстояний, перейдя к полукольцу R+. Договоримся, что для упрощения записи ∞ здесь будем понимать как +∞.

Наш взвешенный ориентированный граф задается теперь следующей матрицей:

Система для вычисления первого столбца матрицы А* имеет вид

Обратим внимание на нюансы, связанные с работой в полукольце R+: элементы 1 и 0 не являются единицей и нулем полукольца, т.е. х ≠ x + 0 и х ≠ 1 ⋅ x в общем случае. Напомним, что сложение в полукольце R+ — взятие наименьшего из двух чисел, а умножение — обычное арифметическое сложение. Заметим, что наличие слагаемого 0 в любой сумме (в полукольце) означает, что вся сумма равна 0; слагаемое +∞ можно не записывать (как нуль полукольца).

Из первого уравнения системы сразу следует, что х1 = 0, так как одно из слагаемых в правой части есть элемент 0. Напомним, что итерация любого элемента в рассматриваемом полукольце равна единице полукольца. Учитавая этот факт, из второго уравнения получаем

x2 = 2*(3x3 + ∞) = 3x3.

Исключая x2 из остальных уравнений системы и учитывая, что x1 = 0, получаем

Далее, из второго уравнения имеем

x3 = (1 ⋅ 3)x3 + ∞ = 43 + ∞,

откуда x3 = 4* ⋅ ∞ = ∞, и поэтому

x3 = 3 ⋅ 0 + 4 ⋅ ∞ + ∞ = 3 + ∞ = 3

Подставляя найденное значение x3 в выражение для x2 получаем x2 = ∞. Первый столбец искомой матрицы вычислен:

Этот столбец содержит кратчайшие расстояния от всех вершин графа до вершины v1. Наличие в нем нулей полукольца во второй и третьей строках говорит о том, что вершина v1 не достижима из вершин v2 и v3.

Аналогично вычисляются остальные столбцы матрицы А*. Результат будет следующим:

Для данного простого ориентированного графа легко сопоставить полученный алгебраический результат с результатом „визуального" анализа ориентированного графа. Рассмотрим, например, пару вершин (v1, v3). В ориентированном графе есть различные пути из вершины v1 в вершину v3. Легко видеть, что заведомо „не выгодны" пути, содержащие контуры и петли, поэтому их рассматривать не будем и вычислим метки по простым путям. По пути v1 → v4 → v3 сумма меток равна 5, по пути v1 → v3 — 10, а по пути v1 → v2 → v3 — 8. Кратчайшее расстояние — 5, что совпадает с ответом, полученным алгебраически: элемент а*13 также равен 5. #

Помимо изложенного есть еще один способ вычисления замыкания матрицы с элементами в замкнутом полукольце. Он основан на понятии пути ранга k из вершины vi в вершину vj.

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

Путь vi0 → vi1 → ... → vim длины m называют путем ранга k при m > 1, если k — наибольшее среди чисел i1, ..., im-1 и путем ранга 0 при m = 1. Путь нулевой длины также считают путем ранга 0. Таким образом, ранг пути — это максимальный номер вершины, в которую разрешено заходить по пути из vi в vj (исключая вершины vi и vj). Путь ранга 0 не содержит промежуточных вершин. Максимальный ранг пути в ориентированном графе при указанном выше способе нумерации равен числу его вершин.

Пример 5.11. В ориентированном графе, изображенном на рис. 5.27, путь v1 → v4 → v1 имеет ранг 4, путь v4 → v1 → v2 — ранг 1, путь v4 → v1 → v3 → v2 — ранг 3. Пути v4 → v3 → v2, v4 → v1 → v3 → v2 и v4 → v2 → v2 → v3 → v2 также имеют ранг 3. #

Обозначим через Сk матрицу стоимостей прохождения между различными парами вершин по всем путям ранга, не превосходящего k. Ее элемент c(k)ij содержит стоимость прохождения из вершины vi в вершину vj по всем путям рангов 0, ..., k-1, k.

Выведем формулу для вычисления элемента c(k)ij матрицы Сk. Для этого заметим следующее. По пути ранга, не большего k, из вершины vi в вершину vj можно пройти следующими способами:
  1. идя из вершины vi в вершину vj по некоторому пути ранга, не превосходящего k — 1, т.е. минуя вершину vk;
  2. сначала идя из vi в vk по пути ранга, не большего k — 1, затем „покрутившись" любое число раз (а может быть, и ни разу) по какому-либо контуру или любому замкнутому пути из vk в vk ранга, не большего k — 1, и, наконец, идя из вершины vk в вершину vj по пути ранга, не большего k - 1 (рис. 5.28).

Рис. 5.28. Задача о путях

При первом способе следования стоимость прохождения из вершины vi в vj по всем путям ранга, не большего л — 1, составит c(k-1)ij.

При втором способе следования стоимость прохождения из vi в vk по всем путям ранга, не большего л — 1, будет равна c(k-1)ik. Стоимость прохождения из vk в vk по всем замкнутым путям ранга, не большего k — 1, составит (c(k-1)kk)*.

Поясним это в частном случае, когда вершина vk содержится в каком-то одном контуре. Пусть Г — такой контур, а μГ — метка этого контура. Тогда очевидно, что метка пути, образованного нуль-кратным прохождением по контуру Г, равна единице полукольца (как метка всякого пути длины 0), метка же пути, образованного m-кратным прохождением по Г при m ≥ 1, равна μmГ. Следовательно, стоимость прохождения по всем путям, которые получаются при произвольном числе прохождений по контуру Г, составит

Стоимость прохождения из вершины vk в вершину vj по пути ранга, не большего k — 1, равна c(k-1)kj (см. рис. 5.28). Таким образом, стоимость прохождения по пути ранга, не большего k, при указанном способе следования составит

c(k-1)ik (c(k-1)kk)* c(k-1)kj.

Таким образом, словесное описание "путешествия" из vi в vj по путям ранга, не большего k, приводит к следующей формуле для вычисления элемента матрицы Сk:

c(k)ij = c(k-1)ij + c(k-1)ik (c(k-1)kk)* c(k-1)kj.     (5.5)

Пусть aij — элементы матрицы меток дуг ориентированного графа. Поскольку каждый путь ранга 0 между дающими вершинами состоит из одной дуги, а каждая вершина достижима сама из себя по пути нулевой длины с меткой 1 или по петле с меткой аii, то элементы матрицы С0 имеют вид

Тогда матрицу стоимостей С = А* можно найти, вычисляя последовательно матрицы С(k) k = 0,n, по формулам (5.5) и (5.6).

Вычисления по формулам 5.5 и 5.6 образуют алгоритм Флойда — Уоршелла — Клини определения стоимости прохождения между любыми парами вершин.

Для полуколец В и R+ в силу того, что в них итерация любого элемента х равна единице полукольца, получим упрощенный вариант формулы (5.5):

c(k)ij = c(k-1)ij + c(k-1)ik c(k-1)kj.     (5.7)

Вычисления по формуле (5.7) начинают с матрицы определяемой соотношением (5.6). Все дальнейшие вычисления удобно также проводить в матричном виде. Для нахождения матрицы С(k) удобно определить сначала матрицу D(k) элементы которой вычисляются по формуле

d(k)ij = c(k-1)ik c(k-1)kj.

Чтобы найти j-й столбец матрицы D(k) достаточно k-й столбец матрицы С(k-1) умножить (в смысле соответствующего полукольца) на j-й элемент k-й строки этой же матрицы.

Решим описанным способом задачу о кратчайших расстояниях в графе, изображенном на рис. 5.27. Для него С0 = А, где матрица А имеет вид (5.4). Используя формулу (5.7), следовательно находим

Например, матрица С(2) по матрице С(1) вычисляется так. Сначала выделим в С(1) вторую строку и второй столбец:

Затем, чтобы вычислить первый столбец матрицы С(2), берем второй (выделенный) столбец матрицы С(1) и умножаем (в полукольце 7?+) его элементы по очереди на первый элемент второй (выделенной) строки той же матрицы С(1). Каждое такое произведение складываем в полукольце с одноименным элементом первого столбца матрицы С(1). Поскольку умножение в полукольце R+ — это арифметическое сложение, а сложение — взятие наименьшего из двух чисел, мы получим следующие элементы первого столбца матрицы С(2):

c(2)11 = min{c(1)11, c(1)12 + c(1)21} = min{0, ∞} = 0,

c(2)21 = min{c(1)21, c(1)22 + c(1)21} = min{∞, ∞} = ∞,

c(2)31 = min{c(1)31, c(1)32 + c(1)21} = min{∞, ∞} = ∞,

c(2)41 = min{c(1)41, c(1)42 + c(1)21} = min{3, ∞} = 3.

Как видим, первый столбец матрицы С(2) не изменился по сравнению с первым столбцом матрицы С(1) Это означает, что нельзя уменьшить стоимость прохождения в первую вершину из других вершин графа, идя через вторую вершину (см. рис. 5.27).

Точно так же для вычисления второго столбца матрицы С(2) умножаем второй столбец С(1) на второй элемент второй строки той же матрицы, для вычисления третьего столбца — на третий элемент второй строки и т.д. Не выписывая подробно всех вычислений, отметим характерный момент — изменение элемента c(2)13 = 8 по сравнению с c(1)13 = 10, связанное с тем, что стоимость прохождения из v1 в v3 по пути ранга 2 оказалась меньше, чем стоимость прохождения по пути ранга 1. Минимальная же стоимость прохождения c(4)13 = 5 получена по пути ранга 4.